在這里,我嘗試使用 google 登錄并將 jwt 令牌保存到資料庫以及登錄后的瀏覽器中。我能夠將令牌保存到資料庫中,但無法在瀏覽器上保存令牌。我該怎么做?
在這里,我嘗試使用 google 登錄并將 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('/');
}
uj5u.com熱心網友回復:
您不需要將 JWT 令牌保存在資料庫中,永遠不要這樣做,因為它們不是為此而生的。相反,使用 API 呼叫發送 JWT。并且在來自前端的每個后續呼叫中,將令牌附加到呼叫中。
我能夠將令牌保存到資料庫中,但無法在瀏覽器上保存令牌。
您不需要將其保存到資料庫。在瀏覽器上,您可以將其保存到本地存盤。
const token = 'get token from API call';
localStorage.setItem("auth_token", token);
localStorage.getItem("auth_token");
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/405398.html
標籤:
下一篇:語音識別麥克風不作業
