@@ -16,6 +16,7 @@ var verifyPassport = require('../libs/passportVerify').verify;
1616var cleanFilename = require ( '../libs/helpers' ) . cleanFilename ;
1717var addSession = require ( '../libs/modifySessions' ) . add ;
1818var jwt = require ( 'jwt-simple' ) ;
19+ var url = require ( 'url' ) ;
1920
2021// Unused but removing it breaks passport
2122passport . serializeUser ( function ( aUser , aDone ) {
@@ -40,10 +41,26 @@ Strategy.find({}, function (aErr, aStrategies) {
4041 } ) ;
4142} ) ;
4243
44+ // Get the referer url for redirect after login/logout
45+ function getRedirect ( aReq ) {
46+ var referer = aReq . get ( 'Referer' ) ;
47+ var redirect = '/' ;
48+
49+ if ( referer ) {
50+ referer = url . parse ( referer ) ;
51+ if ( referer . hostname === aReq . hostname ) {
52+ redirect = referer . path ;
53+ }
54+ }
55+
56+ return redirect ;
57+ }
58+
4359exports . auth = function ( aReq , aRes , aNext ) {
4460 var authedUser = aReq . session . user ;
4561 var strategy = aReq . body . auth || aReq . params . strategy ;
46- var username = aReq . body . username || aReq . session . username ;
62+ var username = aReq . body . username || aReq . session . username ||
63+ ( authedUser ? authedUser . name : null ) ;
4764 var authOpts = { failureRedirect : '/register?stratfail' } ;
4865 var passportKey = aReq . _passport . instance . _key ;
4966
@@ -55,7 +72,7 @@ exports.auth = function (aReq, aRes, aNext) {
5572 }
5673
5774 // Save redirect url from the form submission on the session
58- aReq . session . redirectTo = aReq . body . redirectTo || '/' ;
75+ aReq . session . redirectTo = aReq . body . redirectTo || getRedirect ( aReq ) ;
5976
6077 function auth ( ) {
6178 var authenticate = null ;
@@ -75,11 +92,12 @@ exports.auth = function (aReq, aRes, aNext) {
7592
7693 // Allow a logged in user to add a new strategy
7794 if ( strategy && authedUser ) {
78- aReq . session . username = authedUser . name ;
7995 aReq . session . newstrategy = strategy ;
96+ aReq . session . username = authedUser . name ;
8097 } else if ( authedUser ) {
98+ aRes . redirect ( aReq . session . redirectTo || '/' ) ;
8199 delete aReq . session . redirectTo ;
82- return aRes . redirect ( aReq . body . redirectTo || '/' ) ;
100+ return ;
83101 }
84102
85103 if ( ! username ) {
0 commit comments