简短:
嗨, 我想使用Node.js Express护照Google oauth进行单点登录
也许有人有一个很好的教程或示例代码
长
:基本上:
用户转到我的网站登录页面www.mysite.com/login
单击“使用Google登录”
护照可以完成工作,并且用户已登录
现在到这里一切都很好,
我已经有用户登录,他们正在会话中;
我可以使用req.user
访问,但是:
他需要已经登录。但是无法正常工作。
如果我再次在登录页面www.mysite.com/login上单击“使用Google登录” google登录页面再次显示,并要求用户提供电子邮件密码。
我希望Google知道他们已经对用户进行了身份验证 并发送给我一个代码(/ auth / google / callback?code = 4 / SwCR3zt89 ...) 例如进入我的回调路由(www.mysite.com/auth/google/callback)。
这是代码的一部分:
server.js
var express = require('express');
var passport = require('passport');
var GoogleStrategy = require('passport-google-oauth').OAuth2Strategy;
passport.serializeUser((user, done) => {
done(null, user);
});
passport.deserializeUser((user, done) => {
done(null, user);
});
passport.use(new GoogleStrategy({
clientID: configService.getGoogleClientId(),
clientSecret: configService.getGoogleClientSecret(),
callbackURL: "http://localhost:3000/auth/google/callback"
},
function (accessToken, refreshToken, profile, done) {
User.findOrCreate({ googleId: profile.id }, function (err, user) {
return done(err, user);
});
}
));
var app = express();
app.use(session({
secret: configService.getSessionSecret(),
resave: false,
saveUninitialized: false,
//cookie: { secure: true }
}))
app.use(passport.initialize());
app.use(passport.session());
app.get('/auth/google',
passport.authenticate('google', { scope:
['https://www.googleapis.com/auth/plus.login'] }));
app.get('/auth/google/callback',
passport.authenticate('google', { failureRedirect: '/login' }),
function (req, res) {
res.redirect('/home');
});
login.html :
<html>
<head></head>
<body>
<a href="/auth/google">Sign In with Google</a>
</body>
</html>