使用Google身份验证护照单次登录

时间:2018-08-30 08:55:25

标签: node.js express single-sign-on passport.js passport-google-oauth2

简短:

嗨, 我想使用Node.js Express护照Google oauth进行单点登录

也许有人有一个很好的教程或示例代码

基本上:

  1. 用户转到我的网站登录页面www.mysite.com/login

  2. 单击“使用Google登录”

  3. 护照可以完成工作,并且用户已登录

现在到这里一切都很好, 我已经有用户登录,他们正在会话中; 我可以使用req.user访问,但是:

  1. 用户转到另一个网站www.mysite2.com/home

他需要已经登录。但是无法正常工作。

如果我再次在登录页面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>

0 个答案:

没有答案