По сути, я хочу добавить Google Oauth2.0 с паспортом в мое веб-приложение.В настоящее время у меня есть настройка Oauth в бэкэнде с помощью express, и я хочу, чтобы внешний интерфейс получил к нему доступ.
Интересно, стоит ли просто вызывать Oauth во внешнем интерфейсе и анализировать токен в бэкенде, чтобы он обновилбаза данных и т. д.
На данный момент у моей клиентской стороны есть прокси-сервер для порта, на котором работает Express.
Я попытался получить доступ к маршруту, заданному в бэкэнде вреагировать на интерфейс, надеясь, что он отправит меня на страницу, которую я настроил в бэкэнде, но просто загрузит маршрут моей страницы по умолчанию.
Это мой экспресс-бэкэнд-маршрут
const router = require('express').Router();
const passport = require('passport');
// auth login
router.get('/login', (req, res) => {
res.render('login', { user: req.user });
});
// auth logout
router.get('/logout', (req, res) => {
// handle with passport
res.send('logging out');
});
// auth with google+
router.get('/google', passport.authenticate('google', {
scope: ['profile']
}));
// callback route for google to redirect to
// hand control to passport to use code to grab profile info
router.get('/google/redirect', passport.authenticate('google'), (req, res) => {
res.redirect(req.user)
});
module.exports = router;
Это мой экспресс index.js
const app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
// set up session cookies
app.use(cookieSession({
maxAge: 24 * 60 * 60 * 1000,
keys: [keys.session.cookieKey]
}));
// initialize passport
app.use(passport.initialize());
app.use(passport.session());
//MongoDB Database Setup
require('./models/db.js');
//routing Setup
// set up routes
app.use('/auth', authRoutes);
var routes = require('./routes/routes.js');
app.use('/', routes);
// The "catchall" handler: for any request that doesn't
// match one above, send back React's index.html file.
const port = process.env.PORT || 5000;
app.listen(port);
Это мой passport.config, который сохраняет пользователей в базе данных
passport.serializeUser((user, done) => {
done(null, user.id);
});
passport.deserializeUser((id, done) => {
Users.findById(id).then((user) => {
done(null, user);
});
});
passport.use(
new GoogleStrategy({
// options for google strategy
clientID: keys.google.clientID,
clientSecret: keys.google.clientSecret,
callbackURL: '/auth/google/redirect'
}, (accessToken, refreshToken, profile, done) => {
console.log("got profile");
var googleId = {'googleId': profile.id};
Users.findOne(googleId).then((currentUser)=>{
if(currentUser){
console.log("user chilling");
done(null, currentUser);
}
else{
//create new user
new Users({
googleId: profile.id,
username: profile.displayName,
}).save().then((newUser) => {
console.log('New user created: ' + newUser);
done(null, newUser);
});
}
});
done(null);
})
);
Кроме того, что я пытаюсь вызвать его во внешнем интерфейсе, не выставляяКлючи, после вызова базы данных, он сохраняет, но браузер возвращает неавторизованный на странице.
Любая помощь приветствуется :), (извините, действительно не используйте stackoverflow, мое форматирование выглядит плохо)