Можно ли использовать passport-oauth2 только для обмена accessToken на код авторизации. Поскольку внешний интерфейс выполняет работу по перенаправлению пользователя на страницу входа oauth и перенаправлению uri, он напрямую попадает на конечную точку сервера express и вызывает следующий код:
passport.js:
passport.use(new OAuth2Strategy({
authorizationURL: 'https://www.example.com/oauth2/authorize',
tokenURL: 'https://www.example.com/oauth2/token',
clientID: EXAMPLE_CLIENT_ID,
clientSecret: EXAMPLE_CLIENT_SECRET,
callbackURL: "http://localhost:3000/auth/example/callback"
},
function(accessToken, refreshToken, profile, cb) {
User.findOrCreate({ exampleId: profile.id }, function (err, user) {
return cb(err, user);
});
}
));
Приведенный выше код обратного вызова получает данные пользователя. Так что я использую только обратный вызов из кода ниже.
app.js:
function adminIsLoggedIn(req, res, next) {
// if user is authenticated in the session, carry on
if (req.isAuthenticated())
return next();
// if they aren't redirect them to the home page
res.redirect('/');
}
// required for passport session
app.use(session({
secret: 'secrettexthere',
saveUninitialized: true,
resave: true
}));
// Init passport authentication
app.use(passport.initialize());
// persistent login sessions
app.use(passport.session());
initializePassportoAuth2Config(app);
app.use('/admin', adminIsLoggedIn, admin);
//app.get('/auth/example',
//passport.authenticate('oauth2'));
app.get('/auth/example/callback',
passport.authenticate('oauth2', { failureRedirect: '/login' }),
function (req, res) {
// Successful authentication, redirect home.
res.redirect('/');
});
Но я получаю некоторые противоречивые результаты, когда при вызове req.isAuthenticated () из другого контроллера возвращается false. Когда я вхожу в код метода req.isAuthenticated (), я вижу, что в нем нет пользовательского объекта.
Во всем этом процессе я вижу, что passport.deserliazeUser () никогда не вызывается.
обновление: почтальон звонит на работу, но не звонит браузер