【发布时间】:2016-04-17 09:38:39
【问题描述】:
编写一些代码来使用护照验证用户,目前使用的是 passport-linkedin-oauth2、passport-google-oauth2、passport-facebook 和 passport-twitter。
好的,我使用哪些并不重要,但了解一下可能会有用。 我想做的是找出一种简单的方法将变量传递给后端代码以做出决定。举个例子。目前,系统仅根据天气做出决定,认证是否有效。如果您去注册或登录,然后按 google 按钮,您将登录。
但是,我希望代码能够确定请求来自注册(在这种情况下,新用户成功,现有用户应发回代码和消息,说明“用户已注册”)。 与登录相同。 “现有”用户显然是成功的,但是,如果您按“登录”并且它是新用户,它将返回一条消息,说明“用户未注册”,这允许前端显示一个漂亮的按钮,说明“注册”用户”。
我的问题是,将它传递到后端的平滑方法是什么。 目前调用的两条路由是:
// =====================================
// Google ROUTES =====================
// =====================================
// route for google authentication and login
router.get('/at/google', passport.authenticate('google', { scope : 'email' }));
// handle the callback after Google has authenticated the user
router.get('/cb/google',
passport.authenticate('google', {
successRedirect : '/',
failureRedirect : '/login',
failureFlash: true //This is where we send the failed logins
}));
完美运行,但它们确实调用了同一个对象,因为我真的很懒,想要一个对象来处理所有事情。
我厌倦了在上一页(注册页面)设置会话值:
router.get('/login', function(req, res) {
req.session.passportOpType = "login";
res.render('login.ejs', { title: 'Betchanow - Social betting as it should be' , loginUrl: cfgWebPage.loginUrl, trackingID: cfgWebPage.googleTracking.trackingID, message: req.flash('loginMessage') });
});
router.get('/signup', function(req, res) {
req.session.passportOpType = "signup";
res.render('signup.ejs', { title: 'Betchanow - Social betting as it should be' , loginUrl: cfgWebPage.loginUrl, trackingID: cfgWebPage.googleTracking.trackingID, message: req.flash('signupMessage') });
});
然后在护照的谷歌端拿起它
// =========================================================================
// GOOGLE ==================================================================
// =========================================================================
passport.use(new GoogleStrategy({
clientID : configAuth.googleAuth.clientID,
clientSecret : configAuth.googleAuth.clientSecret,
callbackURL : configAuth.googleAuth.callbackURL,
passReqToCallback : true
},
function(request, accessToken, refreshToken, profile, done) {
// make the code asynchronous
// User.findOne won't fire until we have all our data back from Google
process.nextTick(function(req) {
console.log("This is a " + req.session.authtype)
但是,此阶段的值未定义。 这可能是因为它的回调。
不确定是否保留会话存储。我现在的问题是。如何以直接的方式完成此任务,最好独立于我使用的护照类型?
【问题讨论】:
标签: node.js express passport.js