Как перенаправить пользователя обратно к хосту пользовательского интерфейса / браузера после паспортной аутентификации oauth2 - PullRequest
0 голосов
/ 13 января 2020

Я зарегистрировал клиента в 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");
        });
...