如何使用护照发送成功重定向的用户个人资料数据?

Posted

技术标签:

【中文标题】如何使用护照发送成功重定向的用户个人资料数据?【英文标题】:how to send user profile data on success redirect with passport? 【发布时间】:2018-03-16 10:31:51 【问题描述】:

我对 Node.js 还是很陌生,我正在学习使用护照进行身份验证,在我的节点应用程序中,我有以下几行可以使用 google 对用户进行身份验证,并在成功身份验证后触发回调,

  // send to google to do the authentication
        app.get('/auth/google', passport.authenticate('google',  scope : ['profile', 'email'] ));

        // the callback after google has authenticated the user
        app.get('/auth/oauth/callback',passport.authenticate('google', successRedirect : 'http://127.0.0.1:1234/testbot',failureRedirect : '/'));

我想将用户配置文件数据发送到使用successRedirect 注册的页面,我该怎么做? 我用谷歌认证的护照策略是这样的

passport.use(new GoogleStrategy(
    clientID        : configAuth.googleAuth.clientID,
    clientSecret    : configAuth.googleAuth.clientSecret,
    callbackURL     : configAuth.googleAuth.callbackURL,
    passReqToCallback : true // allows us to pass in the req from our route (lets us check if a user is logged in or not)

,
function(req, token, refreshToken, profile, done) 
    console.log("Its here ");
    // asynchronous
    process.nextTick(function() 

        // check if the user is already logged in
        if (!req.user) 

            User.findOne( 'UserName' : req.body.email , function(err, user) 
                if (err)
                    return done(err);

                if (user) 

                    // if there is a user id already but no token (user was linked at one point and then removed)
                    if (!user.google.token) 
                        user.google.token = token;
                        user.google.name  = profile.displayName;
                        user.google.email = (profile.emails[0].value || '').toLowerCase(); // pull the first email

                        user.save(function(err) 
                            if (err)
                                return done(err);

                            return done(null, user);
                        );
                    

                    return done(null, user);
                 else 
                    var newUser          = new User();
                    newUser.UserName= (profile.emails[0].value || '').toLowerCase(); 
                    newUser.google.id    = profile.id;
                    newUser.google.token = token;
                    newUser.google.name  = profile.displayName;
                    newUser.google.email = (profile.emails[0].value || '').toLowerCase(); // pull the first email

                    newUser.save(function(err) 
                        if (err)
                            return done(err);

                        return done(null, newUser);
                    );
                
            );

         else 
            // user already exists and is logged in, we have to link accounts
            var user               = req.user; // pull the user out of the session

            user.google.id    = profile.id;
            user.google.token = token;
            user.google.name  = profile.displayName;
            user.google.email = (profile.emails[0].value || '').toLowerCase(); // pull the first email

            user.save(function(err) 
                if (err)
                    return done(err);

                return done(null, user);
            );

        

    );

));

【问题讨论】:

【参考方案1】:

我不确定你使用的是什么前端,但如果它与 Redux 反应,并且如果你有 s-s-r,你可以通过从你的服务器触发一个操作来使用 req.user 信息预加载状态。 Here's documentation on that.

或者,如果您有会话设置,您可以在前端加载时发出 get 请求并返回 req.user 信息。

【讨论】:

以上是关于如何使用护照发送成功重定向的用户个人资料数据?的主要内容,如果未能解决你的问题,请参考以下文章

使用护照进行身份验证后,如何在 React FROM express 中重定向到用户仪表板

无法使用 facebook 的护照成功重定向

节点、快递、护照 - 更新记录后更新会话

解决 REST 请求后如何重定向用户

当发送的请求是 Ajax 请求时,如何从 ManagedBean 重定向?

Laravel 护照和 Vue 登录