Как настроить сервер OAuth для отправки информации профиля?

У меня есть собственный провайдер OAuth (koa2-oauth-server), работающий на порту 8080.

У меня есть клиентское приложение, которое использует Passport для аутентификации запроса с помощью OAuth2Strategy.

Следующий код настраивает паспорт для OAuth.

passport.use(
    new OAuth2Strategy({
        tokenURL: 'http://localhost:8080/oauth/token',
        authorizationURL: 'http://localhost:8080/oauth/authorize',
        clientID: 'xxx',
        clientSecret: 'xxx',
        callbackURL: 'http://localhost:3000/oauth/redirect'
    }, (accessToken, refreshToken, profile, done) => {
        console.log(profile); // This is always empty object
        done(null, profile);
    })
);

И следующий код генерирует токен доступа

router.post('/oauth/token', oauth.token(),
    (ctx,next) => {
        // TODO: Profile information not being sent
        const userid = ctx.state.oauth.token.user.id;
        ctx.body = db.users.find(function(aUser){
            return aUser.id == userid;
        })
    }
);

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

Я попытался прочитать код koa2-oauth-server и node-oauth2-server, чтобы понять, как отправить информацию о профиле, но безуспешно.

Как мне настроить поставщика OAuth для отправки информации о профиле обратно клиенту?


person Anand Undavia    schedule 23.12.2017    source источник


Ответы (1)


Я проверил источник паспорта-oauth2 и оказалось, что эта функция была виновником

/**
 * Retrieve user profile from service provider.
 *
 * OAuth 2.0-based authentication strategies can overrride this function in
 * order to load the user's profile from the service provider.  This assists
 * applications (and users of those applications) in the initial registration
 * process by automatically submitting required information.
 *
 * @param {String} accessToken
 * @param {Function} done
 * @api protected
 */
OAuth2Strategy.prototype.userProfile = function(accessToken, done) {
  return done(null, {});
};

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

person Anand Undavia    schedule 24.12.2017