在使用不带状态(stateless)的Passport.js进行谷歌OpenID Connect认证时,主要涉及以下几个基础概念:
原因:可能是由于回调URL配置不正确或Google API权限未正确设置。
解决方法:检查clientID
、clientSecret
和callbackURL
是否正确,并确保在Google开发者控制台中设置了正确的OAuth同意屏幕和应用权限。
原因:JWT令牌具有有效期,过期后需要重新认证。 解决方法:在客户端检查令牌的有效期,并在接近过期时刷新令牌或重新进行认证流程。
原因:浏览器的同源策略可能导致跨域请求失败。 解决方法:在服务器端设置CORS(跨源资源共享)策略,允许来自特定域的请求。
const express = require('express');
const cors = require('cors');
const passport = require('passport');
const GoogleStrategy = require('passport-google-oauth20').Strategy;
const app = express();
app.use(cors());
passport.use(new GoogleStrategy({
clientID: process.env.GOOGLE_CLIENT_ID,
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
callbackURL: "http://localhost:3000/auth/google/callback"
},
function(accessToken, refreshToken, profile, done) {
return done(null, profile);
}
));
app.get('/auth/google', passport.authenticate('google', { scope: ['profile', 'email'] }));
app.get('/auth/google/callback',
passport.authenticate('google', { failureRedirect: '/login' }),
function(req, res) {
res.redirect('/');
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
通过以上步骤和代码示例,可以实现一个基本的无状态Passport.js谷歌OpenID Connect认证流程。
领取专属 10元无门槛券
手把手带您无忧上云