клиент passport-oauth2 как использовать полученные данные профиля - PullRequest
0 голосов
/ 04 января 2019

У меня есть автономный поставщик удостоверений oauth2, который работает. Сейчас я разрабатываю потребителя, который будет аутентифицировать пользователей с помощью этого автономного поставщика.

Я следую этому руководству о паспорте и Google Auth:

Я пытаюсь использовать эту информацию, чтобы использовать passport-oauth2 для работы в качестве клиента. Я внес некоторые изменения в код, представленный в приведенном выше руководстве, следуя официальной документации по passoprt-oauth2 .

Я думаю, что у меня есть проблема с функцией обратного вызова, когда expressjs получает подтверждение аутентификации и информацию о пользователе. Я не понимаю, как использовать эту информацию.

Вот код моего приложения. Js

const express = require('express');

const app = express();

const passport = require('passport');
const OAuth2Strategy = require('passport-oauth2');
const cookieSession = require('cookie-session');

// cookieSession config
app.use(cookieSession({
    maxAge:24*60*60*1000,
    keys: ['secret-personalize']
}));


app.use(passport.initialize());
app.use(passport.session());

//Strategy config


passport.use(new OAuth2Strategy({
    authorizationURL: 'http://localhost:3000/dialog/authorize',
    tokenURL: 'http://localhost:3000/oauth/token',
    clientID: 'xyz123',
    clientSecret: 'ssh-password',
    callbackURL: "/auth/oauth2/callback"
  },

  (accessToken, refreshToken, profile, done) => {
    console.log(profile);
    done(null, profile);

  }
  ));
  // Used to decode the received cookie and persist session

  passport.deserializeUser((user, done) => {
    done(null, user);

  });

// Middleware to check if the User is authenticated

app.get('/auth/oauth2',
  passport.authenticate('oauth2'));


function isUserAuthenticated(req, res, next){

    if (req.user){
        next();
    } else {
        res.send('you must login!');
    }
}



// Routes

app.get('/', (req, res) => {

res.render('index.ejs');
});


// The middleware receives the data from AuthPRovider and runs the function on Strategy config

app.get('/auth/oauth2/callback', passport.authenticate('oauth2'), (req,res) => {
    res.redirect('/secret');
});



// secret route

app.get('/secret', isUserAuthenticated, (req, res) =>{

    res.send('You have reached the secret route');

});


// Logout route

app.get('/logout',(req, res) => {

    req.logout();
    res.redirect('/');

});

    app.listen(8000, () => {
        console.log('Server Started 8000');
    });

и это для views / index.ejs

 <ul>
    <li><a href="/auth/oauth2">Login</a></li>
    <li><a href="/secret">Secret</a></li>
    <li><a href="/logout">Logout</a></li></ul>

Я получил эту ошибку:

Ошибка: не удалось сериализовать пользователя в сеанс на проходе (/home/user/job/NodeJS/test-consumer/second/node_modules/passport/lib/authenticator.js:281:19) в Authenticator.serializeUser (/home/user/job/NodeJS/test-consumer/second/node_modules/passport/lib/authenticator.js:299:5) в SessionManager.logIn (/home/user/job/NodeJS/test-consumer/second/node_modules/passport/lib/sessionmanager.js:14:8) на IncomingMessage.req.login.req.logIn (/home/user/job/NodeJS/test-consumer/second/node_modules/passport/lib/http/request.js:50:33) в OAuth2Strategy.strategy.success (/home/user/job/NodeJS/test-consumer/second/node_modules/passport/lib/middleware/authenticate.js:248:13) проверено (/home/user/job/NodeJS/test-consumer/second/node_modules/passport-oauth2/lib/strategy.js:177:20) в OAuth2Strategy.passport.use.OAuth2Strategy [as _verify] (/home/user/job/NodeJS/test-consumer/second/app.js:31:5) по адресу /home/user/job/NodeJS/test-consumer/second/node_modules/passport-oauth2/lib/strategy.js:193:24 в OAuth2Strategy.userProfile (/home/user/job/NodeJS/test-consumer/second/node_modules/passport-oauth2/lib/strategy.js:275:10) в loadIt (/home/user/job/NodeJS/test-consumer/second/node_modules/passport-oauth2/lib/strategy.js:345:17)

Любая помощь приветствуется.

Спасибо тебе

1 Ответ

0 голосов
/ 22 июля 2019

Вам необходимо добавить сериализатор:

passport.serializeUser(function(user, done) {
  done(null, user);
});

Я сейчас использую этот модуль, но профиль всегда возвращается пустым.

...