Skip to content

Commit d94380e

Browse files
Merge pull request #602 from OpenUserJs/login-redirect
Redirect the user to their previous page after login/logout.
2 parents 244e55c + ac71cf9 commit d94380e

File tree

2 files changed

+29
-10
lines changed

2 files changed

+29
-10
lines changed

controllers/auth.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -49,16 +49,16 @@ exports.auth = function (aReq, aRes, aNext) {
4949
function auth() {
5050
var authenticate = null;
5151

52-
if (strategy === 'google') {
53-
authOpts.scope = ['https://www.googleapis.com/auth/userinfo.profile'];
54-
}
55-
authenticate = passport.authenticate(strategy, authOpts);
56-
5752
// Just in case some dumbass tries a bad /auth/* url
5853
if (!strategyInstances[strategy]) {
5954
return aNext();
6055
}
6156

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

@@ -180,7 +180,7 @@ exports.callback = function (aReq, aRes, aNext) {
180180
} else {
181181
// Delete the username that was temporarily stored
182182
delete aReq.session.username;
183-
doneUrl = aReq.session.redirectTo || doneUrl;
183+
doneUrl = aReq.session.redirectTo;
184184
delete aReq.session.redirectTo;
185185
return aRes.redirect(doneUrl);
186186
}

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)