Единый вход с помощью Google Auth Passport

Короткий:

Привет, я хочу сделать единый вход с помощью экспресс-паспорта nodejs google oauth

Может быть, у кого-то есть хороший учебник или пример кода

Долго:

В принципе:

  1. Пользователь заходит на мою страницу входа в систему www.mysite.com/login

  2. Нажмите "Войти через Google"

  3. Паспорт делает работу, и пользователь вошел в систему

Теперь до этого все работает нормально, и я вошел в систему, и они находятся в сеансе; Я могу получить доступ с req.user но:

  1. Пользователь переходит на другой сайт www.mysite2.com/home

Он должен быть уже авторизован. Но это не работает.

Также, если я снова нажму "Войти через Google" на странице входа в систему www.mysite.com/login, страница входа в 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 ответов

Другие вопросы по тегам