node.js - 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。除此之外一切正常
如果您需要更多信息,我会提供,谢谢。
解决方案
问题出在 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
};
});
推荐阅读
- python - 如何替换来自 GitHub 的原始文件中的 \n、b 和单引号?
- r - 将行折叠到每组中的最低完整行
- python - 使用非方形输入矩阵进行卷积自动编码器
- powershell - 您如何快速停止/启动 140 多台服务器上的服务?
- angular - NGRX 商店更换
- hazelcast - Hazelcast Openfire 插件是否允许 SSL?
- git - 从 git-svn 迁移到 git
- swift - “ViewController”类型的值没有成员“ref”;您指的是 'self' 吗?firebase 迅速出错
- c++ - Value * -> getName 返回空字符串 LLVM
- java - 让接口提供实现它的类的实例