javascript - PassportJs Google Auth2 失败重定向不起作用

标签 javascript node.js express passport.js passport-google-oauth

我正在使用 passport-google-oauth 进行 Google 登录身份验证。几乎所有事情都工作正常,但当我从 config/google.js 文件返回错误时,failureRedirect 从未调用,即 return done(new Error('抱歉!找不到您的电子邮件 ID。请联系管理员。'));

举例说明。请查看以下代码:-

config/google.js

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;
} 

服务器.js

........
const passportGoogle = require('./server/config/auth/google')(jwt, app, passport);
const userRoute = require('./server/routes/user.route')(jwt, app, passportGoogle);
..........

用户.route.js

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;
}

最佳答案

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

  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);
            }
          });
        }
      ));

关于javascript - PassportJs Google Auth2 失败重定向不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48227500/

相关文章:

javascript - 设置主干模型

javascript - 使用 jQuery 通过 Ajax 将数据从 javascript 发送到 php。如何查看回数据?

node.js - 为 Node/Express/Typescript 和 Angular 设置一个项目

javascript - paper.js 联合差异和交集

javascript - 如何在 Highstock 中同步“从到”日期包装器?

javascript - 将文本格式添加到我的 NodeJS 应用程序中的评论部分

javascript - 在 NodeJs 中的 Require 中传递参数

node.js - 与elasticsearch连接的node.js客户端中的Econn重置和堆内存空间不足

javascript - 连接多方中间获取文件请求未定义

node.js - Express 中间件 - 添加 promise 拒绝处理程序