首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PassportJs Google Auth2 failureRedirect不工作

PassportJs Google Auth2 failureRedirect不工作
EN

Stack Overflow用户
提问于 2018-01-12 13:42:55
回答 2查看 1.2K关注 0票数 1

我正在使用passport-google-oauth认证谷歌登录。几乎所有事情都正常工作,但是当我从failureRedirect文件中返回错误时,即return done(new Error('Sorry! Your email id is not found. Please contact to Admin.'));时,return done(new Error('Sorry! Your email id is not found. Please contact to Admin.'));从未调用过

以身作则。请通过以下代码:-

config/google.js

代码语言:javascript
复制
module.exports = (jwt, app, passport) => {
  const GoogleStrategy = require('passport-google-oauth').OAuth2Strategy;
  const User = require('../../models/user.model');

  passport.use(new GoogleStrategy({
    clientID: "xxxxxxxxxxxxxxxxxxxxxx",
    clientSecret: "xxxxxxxxxxxxxxx",
    callbackURL: "http://localhost:3000/api/user/google/callback"
  },
    function (accessToken, refreshToken, profile, done) {
      User.findOne({
        email: profile.emails[0].value,
        isActive: true
      }, function (err, user) {
        if (err) {
          return done(err);
        }
        if (!user) {
          return done(new Error('Sorry! Your email id is not found. Please contact to Admin.'));
        } else {
          return done(err, user);
        }
      });
    }
  ));
  return passport;
} 

server.js

代码语言:javascript
复制
........
const passportGoogle = require('./server/config/auth/google')(jwt, app, passport);
const userRoute = require('./server/routes/user.route')(jwt, app, passportGoogle);
..........

user.route.js

代码语言:javascript
复制
import express from 'express';
const router = express.Router();
import User from '../models/user.model';
import UserCtrl from '../controllers/user.controller';

module.exports = (jwt, app, passportGoogle) => {
    /* GET api listing. */
    router.get('/', (req, res) => {
        UserCtrl.getUsers({})
            .exec((err, users) => {
                if (err)
                    return next(err);
                res.json(users)
            })
    });

    router.get('/google',
        passportGoogle.authenticate('google', { scope: ['profile', 'email'] }));

    router.get('/google/callback',
        passportGoogle.authenticate('google', { failureRedirect: '/session/login' }),

     //HERE :  failureRedirect: '/session/login' :- it never called

        function (req, res) {
            console.log('req.user', req.user)
            // Successful authentication, redirect home.
            res.redirect('/dashboard');
        });

    return router;
}
EN

回答 2

Stack Overflow用户

发布于 2018-07-29 08:45:54

我只是路过,看到你的问题没有答案,我想如果你想在谷歌护照策略中拒绝身份验证,你应该把false作为第二个参数,而不是用户在完成回调。这将触发failureRedirect

代码语言:javascript
复制
  function (accessToken, refreshToken, profile, done) {
          User.findOne({
            email: profile.emails[0].value,
            isActive: true
          }, function (err, user) {
            if (err) {
              return done(err);
            }
            if (!user) {
              return done(new Error('Sorry! Your email id is not found. Please contact to Admin.', false));
              // Add False As Second Parameter.
            } else {
              return done(err, user);
            }
          });
        }
      ));
票数 2
EN

Stack Overflow用户

发布于 2021-12-30 22:17:12

done方法应该有两个参数为null来触发failureRedirect。像这样,完成(null,null)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48227500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档