Javascript 如何使用passport.js将数据从React客户端传递到Oauth2.0 Google策略流
我想在React客户端使用用户提供的用户名,并在身份验证过程中将其传递到服务器端的GoogleOAuth中。我最初认为我可以通过调用/api/auth/google/${username}将其与req.params.username一起传递,并使用req.update()将其保存到我的mongo数据库,或者将其附加到google通过profile.username=req.params.username返回的profile对象。不幸的是,我对谷歌策略作为中间件的工作原理还不够熟悉 目前,用户通过发送到/api/auth/google进行注册,然后google策略自动处理流Javascript 如何使用passport.js将数据从React客户端传递到Oauth2.0 Google策略流,javascript,node.js,reactjs,oauth-2.0,passport.js,Javascript,Node.js,Reactjs,Oauth 2.0,Passport.js,我想在React客户端使用用户提供的用户名,并在身份验证过程中将其传递到服务器端的GoogleOAuth中。我最初认为我可以通过调用/api/auth/google/${username}将其与req.params.username一起传递,并使用req.update()将其保存到我的mongo数据库,或者将其附加到google通过profile.username=req.params.username返回的profile对象。不幸的是,我对谷歌策略作为中间件的工作原理还不够熟悉 目前,用户通过
app.get('/auth/google', passport.authenticate('google', {
scope: ['profile', 'email']
}))
我的谷歌战略如下:
passport.use(new GoogleStrategy(
{
clientID: keys.googleClientID,
clientSecret: keys.googleClientSecret,
callbackURL: "/auth/google/callback",
proxy: true
},
async (accessToken, refreshToken, profile, done) => {
const existingUser = await User.findOne({ googleId: profile.id,
image: profile.photos[0].value})
if (existingUser){
return done(null, existingUser);
}
const newUser = new User({ googleId: profile.id, image:
profile.photos[0].value}).save();
done(null, newUser);
})
);
以及回调路径:
app.get('/auth/google/callback', passport.authenticate('google'),
(req, res) => {
res.redirect('/')
})
由于返回的用户配置文件保存在Google strategy本身内部的mongo db中,因此我不确定如何将req.params.username附加到配置文件对象。在我执行newUser=().save()命令之前,有没有关于如何在Google策略中访问用户名的建议?或者有没有更好的方法将用户名附加到保存的用户?您的原始想法是正确的;您只是缺少一个实现细节。OAuth2策略,就像您在这里使用的Google策略一样,可以在策略配置选项中传递一个
{passReqToCallback:true}
标志。设置此选项后,您的回调将可以访问原始请求:
passport.use(new GoogleStrategy({
clientID: keys.googleClientID,
clientSecret: keys.googleClientSecret,
callbackURL: "/auth/google/callback",
proxy: true,
passReqToCallback: true
},
async (req, accessToken, refreshToken, profile, done) => {
// Now you have access to the original req.params.username, or any data
// the original request has attached to it
...
})
另见:
这正是我想要的,非常感谢你抽出时间来帮助我,安迪。