[英]How to create jwt token after google login in nodejs
在這里,我嘗試使用谷歌登錄並將 jwt 令牌保存到數據庫以及登錄后的瀏覽器中。 我能夠將令牌保存到數據庫中,但無法在瀏覽器上保存令牌。 我該怎么做?
在這里,我嘗試使用谷歌登錄並將 jwt 令牌保存到數據庫以及登錄后的瀏覽器中。 我能夠將令牌保存到數據庫中,但無法在瀏覽器上保存令牌。 我該怎么做?
// Google login
passport.use(new GoogleStrategy({
clientID: "1089485782592-hlltndeg9aikjoarh52m2s7jcpi15of4.apps.googleusercontent.com",
clientSecret: "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",
callbackURL: "http://localhost:3300/auth/google/callback",
passReqToCallback: true
},
async function(request, accessToken, refreshToken, profile, done, req, res) {
try {
// console.log(request);
// console.log(accessToken);
// console.log(refreshToken);
// console.log(profile);
// const id = profile.id;
// console.log(profile.emails[0].value);
registerEmail = profile.emails[0].value;
// req.session.profileEmail = registerEmail;
const registerName = profile.name.givenName;
const registerUsername = profile.id;
const registerContactno = "1234567890";
const registerPassword = "34rfcxx32";
const source = "Google";
const currentUser = await loginUser.findOne({ registerEmail })
if (currentUser==null) {
const newUser = new loginUser({
registerEmail,
registerName,
registerUsername,
registerContactno,
registerPassword,
source
})
const saved = await newUser.save();
const currentUser = await loginUser.findOne({ registerEmail })
const token = await currentUser.generateAuthToken();
console.log(`token ${token}`);
res.cookie('jwtToken', token, { expires: new Date(Date.now() + 60 * 60 * 1000) })
req.session.userName = currentUser.registerName;
return done(null, profile);
}
else {
console.log('not saved');
const currentUser = await loginUser.findOne({ registerEmail })
const token = await currentUser.generateAuthToken();
console.log(`token1 ${token}`);
res.cookie('jwtToken', token, { expires: new Date(Date.now() + 60 * 60 * 1000) })
req.session.userName = currentUser.registerName;
console.log(profile);
return done(null, profile);
}
}
catch(e) {
console.log(`error while google login ${e}`);
}
}))
app.get('/auth/google',
passport.authenticate('google', { scope: ['profile', 'email'] }));
app.get('/auth/google/callback',
// passport.authenticate('google', { failureRedirect: '/about' }),
// function(req, res) {
// console.log('dashboard');
// // Successful authentication, redirect home.
// res.redirect('/dashboard');
passport.authenticate( 'google', {
successRedirect: '/protected',
failureRedirect: '/auth/google/failure'
}));
passport.serializeUser(function(user, done){
done(null, user);
})
passport.deserializeUser(function(user, done){
done(null, user);
})
app.get('/protected', auth, async(req, res) => {
try {
// console.log(req.user);
console.log('dashboard');
// console.log(req.user.displayName);
// console.log("isLoggedIn req.user: " + req.user);
// console.log(req)
res.render('dashboard');
}
catch(e) {
console.log(`protected ${e}`);
}
});
app.get('/auth/google/failure', isLoggedIn, (req, res) => {
console.log('fail');
res.render('/');
});
function isLoggedIn(req, res, next) {
// req.user ? next() : res.sendStatus(401);
console.log(req.user);
if (req.cookies!=undefined) {
console.log("Authenticated");
return next();
}
res.redirect('/');
}
您不需要在數據庫中保存 JWT 令牌,永遠不要這樣做,因為它們不是為此而生的。 相反,使用 API 調用發送 JWT。 並且在來自前端的每個后續調用中,將令牌附加到調用中。
我能夠將令牌保存到數據庫中,但無法在瀏覽器上保存令牌。
您不需要將其保存到數據庫。 在瀏覽器上,您可以將其保存到本地存儲。
const token = 'get token from API call';
localStorage.setItem("auth_token", token);
localStorage.getItem("auth_token");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.