我在我的应用程序中使用护照模块(
github身份验证),我想根据操作重定向…我检查它是否只是正常登录或用户是否第一次登录.
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函数中,我检查它是否是新用户并执行所有数据库操作…进行测试我让函数返回一个msg变量,该变量只是一个表示“login”或“new_registration”的字符串.
所以我的问题是如何“传输”我从findOrcreateuser获得的变量,以便我可以在护照身份验证完成后相应地重定向(“/ 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' }),res) { res.redirect('/'); });
解决方法
在你的验证回调中,我会改变一些事情,以便findOrcreateuser函数将实际记录提供给回调,然后将其传递给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);
现在,在验证后处理回调URL时,您可以检查此用户记录并查看它是否是新的(我假设它在这里有一个isNew属性):
app.get('/auth/github/callback',{ failureRedirect: '/login' }),res) { // successful auth,user is set at req.user. redirect as necessary. if (req.user.isNew) { return res.redirect('/back_again'); } res.redirect('/welcome'); });
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。