首页 > 解决方案 > ExpressJS & Passport pass req, res

问题描述

我正在尝试将 req & res 传递给回调以使用 requestIp 检查用户的 ip 以防止多重计费,任何帮助将不胜感激。(req.clientIp 返回用户的ip)

users.js 文件片段:

router.get('/google', passport.authenticate('google', {
  scope: ['profile', 'email']
}));
router.get('/google/callback', (req, res) => {
  passport.authenticate('google', {
    failureRedirect: '/users/register'
  }), (req, res) => {
    res.redirect('/dashboard');
  };
});

passport.js 文件片段:

  passport.use(new GoogleStrategy({
    clientID: keys.googleClientId,
    clientSecret: keys.googleClientSecret,
    callbackURL: '/users/google/callback',
    proxy: true
  }, (accessToken, refreshToken, profile, done) => {
    console.log(accessToken, profile);

    // const image = profile.photos[0].value;
    const email = profile.emails[0].value;
    var google = {
      googleID: profile.id,
      firstName: profile.name.givenName,
      lastName: profile.name.familyName,
      image: profile.photos[0].value
    }
    console.log(google);

    User.findOne({
      email: email
    }).then(user => {
      if (user) {
        user.google = google
        user.save().then(() => {
          done(null, user);
        });
      } else {
        console.log('no user');
        new User({
          email: email,
          username: `${google.firstName} ${google.lastName}`,
          google: google
        }).save().then(user => {
          done(null, user);
        });
      };
    });
  }));

编辑:我想在 passport.js 文件中访问 req & res。除此之外一切正常

如果您需要更多信息,我会提供,谢谢。

标签: node.jsexpresspassport.js

解决方案


问题出在 router.get('/google'... 您必须将某些内容发送回客户端。

router.get('/google', function(req,res){
  passport.authenticate('google', {
    scope: ['profile', 'email']
  });
  res.send('something');
});
router.get('/google/callback', (req, res) => {
  passport.authenticate('google', {
    failureRedirect: '/users/register'
  }), (req, res) => {
    res.redirect('/dashboard');//as these you send something
  };
});


推荐阅读