gpt4 book ai didi

node.js - 如何使用 Passport 成功重定向后发送用户个人资料数据?

转载 作者:太空宇宙 更新时间:2023-11-04 01:59:35 24 4
gpt4 key购买 nike

我对 Node.js 很陌生,我正在学习使用 Passport 进行身份验证,在我的 Node 应用程序中,我有以下几行,它使用 google 对用户进行身份验证,并在身份验证成功后触发回调,

  // send to google to do the authentication
app.get('/auth/google', passport.authenticate('google', { scope : ['profile', 'email'] }));

// the callback after google has authenticated the user
app.get('/auth/oauth/callback',passport.authenticate('google', {successRedirect : 'http://127.0.0.1:1234/testbot',failureRedirect : '/'}));

我想将用户个人资料数据发送到使用 successRedirect 注册的页面,我该怎么做?我的 Google 身份验证 Passport 策略如下

passport.use(new GoogleStrategy({
clientID : configAuth.googleAuth.clientID,
clientSecret : configAuth.googleAuth.clientSecret,
callbackURL : configAuth.googleAuth.callbackURL,
passReqToCallback : true // allows us to pass in the req from our route (lets us check if a user is logged in or not)

},
function(req, token, refreshToken, profile, done) {
console.log("Its here ");
// asynchronous
process.nextTick(function() {

// check if the user is already logged in
if (!req.user) {

User.findOne({ 'UserName' : req.body.email }, function(err, user) {
if (err)
return done(err);

if (user) {

// if there is a user id already but no token (user was linked at one point and then removed)
if (!user.google.token) {
user.google.token = token;
user.google.name = profile.displayName;
user.google.email = (profile.emails[0].value || '').toLowerCase(); // pull the first email

user.save(function(err) {
if (err)
return done(err);

return done(null, user);
});
}

return done(null, user);
} else {
var newUser = new User();
newUser.UserName= (profile.emails[0].value || '').toLowerCase();
newUser.google.id = profile.id;
newUser.google.token = token;
newUser.google.name = profile.displayName;
newUser.google.email = (profile.emails[0].value || '').toLowerCase(); // pull the first email

newUser.save(function(err) {
if (err)
return done(err);

return done(null, newUser);
});
}
});

} else {
// user already exists and is logged in, we have to link accounts
var user = req.user; // pull the user out of the session

user.google.id = profile.id;
user.google.token = token;
user.google.name = profile.displayName;
user.google.email = (profile.emails[0].value || '').toLowerCase(); // pull the first email

user.save(function(err) {
if (err)
return done(err);

return done(null, user);
});

}

});

}));

最佳答案

我不确定你使用什么前端,但如果它与 Redux 一起 React,并且如果你有 SSR,你可以通过从服务器触发一个操作来使用 req.user 信息来 preloadState。 Here's documentation on that.

或者,如果您有 session 设置,您可以在前端加载时发出获取请求,并使用 req.user 信息进行响应。

关于node.js - 如何使用 Passport 成功重定向后发送用户个人资料数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46574883/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com