Я зарегистрировал клиента в github как веб-приложение oAuth2. Я успешно интегрировал это в мой nodejs веб-интерфейс и использую реагирование js в качестве внешнего интерфейса. Вся аутентификация или авторизация обрабатываются здесь библиотекой паспортов, и она пытается вернуть accessToken в конце.
Ниже приведен мой NodeJS API-код, и он работает, как и ожидалось, для получения токена доступа:
const session = require('express-session');
const cookieparser = require('cookie-parser');
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
var GitHubStrategy = require('passport-github').Strategy;
const db = require('../shared/models');
// export a function that receives the Express app we will configure for Passport
module.exports = (app) => {
app.use(cookieparser());
app.use(session({
// this should be changed to something cryptographically secure for production
secret: 'keyboard cat',
}));
passport.serializeUser((accessToken, done) => {
done(null, accessToken);
});
passport.deserializeUser(function (accessToken, done) {
done(null, accessToken);
});
passport.use(new GitHubStrategy({
clientID: 'abcxxxxxxxxxxxxxxxxxxx',
clientSecret: '01234sdf324243242342342342342342424',
callbackURL: "http://localhost:3001/auth/github/callback"
},
function (accessToken, refreshToken, profile, cb) {
cb(null, accessToken);
}
));
// initialize passport. this is required, after you set up passport but BEFORE you use passport.session (if using)
app.use(passport.initialize());
// only required if using sessions. this will add middleware from passport
// that will serialize/deserialize the user from the session cookie and add
// them to req.user
app.use(passport.session());
}
Но когда я хочу вернуть пользователя обратно в пользовательский интерфейс, я потерял исходный URL-адрес браузера. запрос пришел и следующий код перенаправляет на мою страницу api / dashboard.
router.route('/auth/github/callback').get(
passport.authenticate('github', { failureRedirect: '/login' }),
function (req, res) {
res.redirect("/dashboard-page");
});