0

我有一个节点 js 服务器,作为登录策略,我将护照与谷歌 OAuth 一起使用。这是我的代码

passport.use(new GoogleStrategy({
            clientID: ...,
            clientSecret: ...,
            callbackURL: "http://localhost:3000/users/googleAuth/callback"
        },
        function(accessToken, refreshToken, profile, done) {
            process.nextTick(function(){
                UserDB.findOne({'google.id': profile.id}, function(err, user){
                    if(err)
                        return done(err);
                    if(user)
                        if(user.active)
                            return done(null, user);
                        else
                            return done("user was disabled");
                    else {
                        var newUser = new UserDB();
                        newUser.admin = false;
                        newUser.email = profile.emails[0].value;
                        newUser.google.id = profile.id;
                        newUser.google.token = accessToken;
                        newUser.google.name = profile.displayName;
                        newUser.google.email = profile.emails[0].value;

                        newUser.save(function(err){
                            if(err)
                                console.log(err);
                            else
                                return done(null, newUser);
                        });
                        console.log(profile);
                    }
                });
            });
        }
    ));

这是回调

router.get('/googleAuth/callback',
    passport.authenticate('google', {successRedirect:'/'}), function (req,res) {
        if(!req.isAuthenticated())
            res.redirect('/');
    });

用户有一个活动属性,如果它设置为 false 用户无法登录(您可以在代码中看到这一点),当发生这种情况时,我想将用户重定向到带有错误消息的主页,我试图使用res.redirect('/'),但是它没有用,用户只是堆叠在您选择谷歌用户的屏幕中,我也尝试添加 failureRedirect 属性但结果相同。如何重定向用户?是否也可以发送消息?

4

0 回答 0