Skip to content

Commit aa6aa75

Browse files
Redirect the user to their previous page after login/logout.
1 parent 244e55c commit aa6aa75

File tree

2 files changed

+32
-11
lines changed

2 files changed

+32
-11
lines changed

controllers/auth.js

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -47,18 +47,19 @@ exports.auth = function (aReq, aRes, aNext) {
4747
var authOpts = { failureRedirect: '/register?stratfail' };
4848

4949
function auth() {
50-
var authenticate = null;
51-
52-
if (strategy === 'google') {
53-
authOpts.scope = ['https://www.googleapis.com/auth/userinfo.profile'];
54-
}
55-
authenticate = passport.authenticate(strategy, authOpts);
50+
var authenticate = null;
51+
var referer = aReq.get('Referer');
5652

5753
// Just in case some dumbass tries a bad /auth/* url
5854
if (!strategyInstances[strategy]) {
5955
return aNext();
6056
}
6157

58+
if (strategy === 'google') {
59+
authOpts.scope = ['https://www.googleapis.com/auth/userinfo.profile'];
60+
}
61+
authenticate = passport.authenticate(strategy, authOpts);
62+
6263
authenticate(aReq, aRes, aNext);
6364
}
6465

@@ -180,8 +181,9 @@ exports.callback = function (aReq, aRes, aNext) {
180181
} else {
181182
// Delete the username that was temporarily stored
182183
delete aReq.session.username;
183-
doneUrl = aReq.session.redirectTo || doneUrl;
184+
doneUrl = aReq.session.redirectTo;
184185
delete aReq.session.redirectTo;
186+
console.log('2. ' + doneUrl);
185187
return aRes.redirect(doneUrl);
186188
}
187189
});

controllers/index.js

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ var isDbg = require('../libs/debug').isDbg;
88
//
99
var async = require('async');
1010
var _ = require('underscore');
11+
var url = require('url');
1112

1213
var Discussion = require('../models/discussion').Discussion;
1314
var Group = require('../models/group').Group;
@@ -151,13 +152,30 @@ exports.home = function (aReq, aRes) {
151152
async.parallel(tasks, asyncComplete);
152153
};
153154

155+
// Get the referer url for redirect after login/logout
156+
function getRedirect(aReq) {
157+
var referer = aReq.get('Referer');
158+
var redirect = '/';
159+
160+
if (referer) {
161+
referer = url.parse(referer);
162+
if (referer.hostname === aReq.hostname) {
163+
redirect = referer.path;
164+
}
165+
}
166+
167+
return redirect;
168+
}
169+
154170
// UI for user registration
155171
exports.register = function (aReq, aRes) {
156172
var authedUser = aReq.session.user;
157173

158174
// If already logged in, goto the front page.
159-
if (authedUser)
160-
return aRes.redirect('/');
175+
if (authedUser) {
176+
return aRes.redirect(getRedirect(aReq));
177+
}
178+
aReq.session.redirectTo = getRedirect(aReq);
161179

162180
//
163181
var options = {};
@@ -225,12 +243,13 @@ exports.register = function (aReq, aRes) {
225243

226244
exports.logout = function (aReq, aRes) {
227245
var authedUser = aReq.session.user;
246+
var redirectUrl = getRedirect(aReq);
228247

229-
if (!authedUser) { return aRes.redirect('/'); }
248+
if (!authedUser) { return aRes.redirect(redirectUrl); }
230249

231250
User.findOne({ _id: authedUser._id }, function (aErr, aUser) {
232251
removeSession(aReq, aUser, function () {
233-
aRes.redirect('/');
252+
aRes.redirect(redirectUrl);
234253
});
235254
});
236255
};

0 commit comments

Comments
 (0)