@@ -8,6 +8,7 @@ var isDbg = require('../libs/debug').isDbg;
88//
99var async = require ( 'async' ) ;
1010var _ = require ( 'underscore' ) ;
11+ var url = require ( 'url' ) ;
1112
1213var Discussion = require ( '../models/discussion' ) . Discussion ;
1314var 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
155171exports . 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
226244exports . 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