护照:不同的redirectlogin和帐户注册

我正在使用护照模块(github身份validation)在我的应用程序,我想根据行动redirect…我检查是否只是一个正常的login或如果用户第一次login。

passport.use(new GitHubStrategy({ clientID: conf.github.app_id, clientSecret: conf.github.app_secret, callbackURL: conf.github.callback_url }, function(accessToken, refreshToken, profile, done) { // asynchronous verification, for effect... process.nextTick(function () { // To keep the example simple, the user's GitHub profile is returned to // represent the logged-in user. In a typical application, you would want // to associate the GitHub account with a user record in your database, // and return that user instead. Models_User.findOrCreateUser(profile, function(msg){ console.log("auth type:" + msg); }); return done(null, profile); }); } )); 

在我findOrCreateUser函数我检查是否是一个新的用户,并做所有的数据库操作…为了testing我让函数返回一个味精variables,这只是一个string,说:“login”或“new_registration”。

所以我的问题是如何“运输”我从findOrCreateUser获得的variables,以便我可以在护照authentication完成后相应地redirect(“/ welcome”或“/ back_again”)。

在我的应用程序中的其他护照代码:

 // GET /auth/github // Use passport.authenticate() as route middleware to authenticate the // request. The first step in GitHub authentication will involve redirecting // the user to github.com. After authorization, GitHubwill redirect the user // back to this application at /auth/github/callback app.get('/auth/github', passport.authenticate('github'), //passport.authenticate('github', { scope: ['user', 'public_repo', 'gist'] }), function(req, res){ // The request will be redirected to GitHub for authentication, so this // function will not be called. }); // GET /auth/github/callback // Use passport.authenticate() as route middleware to authenticate the // request. If authentication fails, the user will be redirected back to the // login page. Otherwise, the primary route function function will be called, // which, in this example, will redirect the user to the home page. app.get('/auth/github/callback', passport.authenticate('github', { successRedirect: '/', failureRedirect: '/login' }), function(req, res) { res.redirect('/'); }); 

在你的validationcallback中,我会改变一些事情,以便findOrCreateUser函数提供实际logging到callback函数中,然后传递给done() ,如下所示:

 Models_User.findOrCreateUser(profile, function(user){ console.log("auth type:" + msg); return done(null, user); }); // take this out, use the actual model above //return done(null, profile); 

现在,在处理authentication后的callbackURL时,你可以检查这个用户logging,看看它是否是新的(我假设它有一个isNew属性):

 app.get('/auth/github/callback', passport.authenticate('github', { failureRedirect: '/login' }), function(req, res) { // successful auth, user is set at req.user. redirect as necessary. if (req.user.isNew) { return res.redirect('/back_again'); } res.redirect('/welcome'); });