OAuth session management

master
rob 2 years ago
parent 7bf1acbc8b
commit a03e02ec41

@ -14,7 +14,7 @@
"program": "${workspaceFolder:dtp-base}/dtp-webapp.js", "program": "${workspaceFolder:dtp-base}/dtp-webapp.js",
"console": "integratedTerminal", "console": "integratedTerminal",
"env": { "env": {
"HTTP_BIND_PORT": "3310" "HTTP_BIND_PORT": "3010"
} }
}, },
{ {

@ -184,6 +184,7 @@ class AuthController extends SiteController {
try { try {
const token = await ConnectToken.create({ const token = await ConnectToken.create({
created: new Date(), created: new Date(),
userType: req.user.core ? 'CoreUser' : 'User',
user: req.user._id, user: req.user._id,
token: uuidv4(), token: uuidv4(),
}); });

@ -10,7 +10,8 @@ const Schema = mongoose.Schema;
const ConnectTokenSchema = new Schema({ const ConnectTokenSchema = new Schema({
created: { type: Date, default: Date.now, required: true, index: -1, expires: '1m' }, created: { type: Date, default: Date.now, required: true, index: -1, expires: '1m' },
user: { type: Schema.ObjectId, required: true, index: true, ref: 'User' }, userType: { type: String, enum: ['User', 'CoreUser'], required: true },
user: { type: Schema.ObjectId, required: true, index: true, refPath: 'userType' },
token: { type: String, required: true }, token: { type: String, required: true },
claimed: { type: Date }, claimed: { type: Date },
}); });

@ -79,27 +79,21 @@ class CoreNodeService extends SiteService {
router.get( router.get(
coreAuthCallbackUri, coreAuthCallbackUri,
(req, res, next) => { (req, res, next) => {
this.log.debug('Core auth callback', { this.log.debug('Core auth callback', { strategy: coreAuthStrategyName });
strategy: coreAuthStrategyName,
body: req.body,
params: req.params,
query: req.query,
});
return next(); return next();
}, },
passport.authenticate(coreAuthStrategyName, { failureRedirect: '/' }), passport.authenticate(coreAuthStrategyName, { failureRedirect: '/' }),
async (req, res) => { async (req, res, next) => {
this.log.info('tagging session as Core', { coreId: core._id });
req.session.userType = 'Core'; req.session.userType = 'Core';
req.session.coreId = core._id; req.session.coreId = core._id;
req.login(req.user, (error) => {
// req.login(user, (error) => { if (error) {
// if (error) { return next(error);
// return next(error); }
// } req.session.userType = 'Core';
// return res.redirect('/'); req.session.coreId = core._id;
// }); return res.redirect('/');
return res.redirect('/'); });
}, },
); );
}); });
@ -125,12 +119,6 @@ class CoreNodeService extends SiteService {
}, },
async (accessToken, refreshToken, params, profile, cb) => { async (accessToken, refreshToken, params, profile, cb) => {
const NOW = new Date(); const NOW = new Date();
this.log.info('Core login', {
accessToken,
refreshToken,
params,
profile,
});
try { try {
const coreUserId = mongoose.Types.ObjectId(params.coreUserId); const coreUserId = mongoose.Types.ObjectId(params.coreUserId);
const user = await CoreUser.findOneAndUpdate( const user = await CoreUser.findOneAndUpdate(
@ -183,12 +171,6 @@ class CoreNodeService extends SiteService {
}, },
); );
// const old = coreAuthStrategy._loadUserProfile;
coreAuthStrategy._loadUserProfile = async (accessToken, done) => {
this.log.info('loadUserProfile', { accessToken });
return done(null);
};
this.log.info('registering Core auth strategy', { this.log.info('registering Core auth strategy', {
name: coreAuthStrategyName, name: coreAuthStrategyName,
host: core.address.host, host: core.address.host,

@ -16,6 +16,17 @@ class SiteCommon extends Events {
this.appTemplateRoot = path.join(this.dtp.config.root, 'app', 'templates'); this.appTemplateRoot = path.join(this.dtp.config.root, 'app', 'templates');
} }
regenerateSession (req) {
return new Promise((resolve, reject) => {
req.session.regenerate((err) => {
if (err) {
return reject(err);
}
resolve();
});
});
}
saveSession (req) { saveSession (req) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
req.session.save((err) => { req.session.save((err) => {

@ -90,7 +90,7 @@ module.connectRedis = async (dtp) => {
port: parseInt(process.env.REDIS_PORT || '6379', 10), port: parseInt(process.env.REDIS_PORT || '6379', 10),
password: process.env.REDIS_PASSWORD, password: process.env.REDIS_PASSWORD,
keyPrefix: process.env.REDIS_KEY_PREFIX, keyPrefix: process.env.REDIS_KEY_PREFIX,
lazyConnect: true, lazyConnect: false,
}; };
module.log.info('connecting to Redis', { module.log.info('connecting to Redis', {
host: options.host, host: options.host,

Loading…
Cancel
Save