Единый вход с помощью Google Auth Passport
Короткий:
Привет, я хочу сделать единый вход с помощью экспресс-паспорта nodejs google oauth
Может быть, у кого-то есть хороший учебник или пример кода
Долго:
В принципе:
Пользователь заходит на мою страницу входа в систему www.mysite.com/login
Нажмите "Войти через Google"
Паспорт делает работу, и пользователь вошел в систему
Теперь до этого все работает нормально, и я вошел в систему, и они находятся в сеансе; Я могу получить доступ с req.user
но:
- Пользователь переходит на другой сайт 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>