Получение ошибки «Вам нужно предоставить перенаправление» с помощью WP OAuth Server и NodeJS

#node.js #wordpress #nginx #passport.js

#node.js #wordpress #nginx #passport.js

Вопрос:

Я создаю приложение NodeJS и пытаюсь использовать WordPress для аутентификации через OAuth2, но я сталкиваюсь с несколькими проблемами. Я использую модуль passport-wpoauth.

При попытке авторизации я получаю сообщение об ошибке «Вам нужно предоставить перенаправление». Я попытался указать «redirectUri» в параметрах, переданных в WPOAuthStrategy, но это не помогло. passport.authenticate() Насколько я вижу, проблема возникает при вызове.

Код выглядит следующим образом, и мне было интересно, есть ли у вас какие-либо предложения?

 const bodyParser = require("body-parser");
const express = require('express');
const expressSession = require('express-session');
const url = require('url');
const passport = require('passport');
const OAuth2Strategy = require('passport-oauth2');
const WPOAuthStrategy = require('passport-wpoauth');

function initPassport(app) {

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

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

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

    var oauthConfig = {
      "clientID": "Wq3lkiaPfMn83Cd5YWNoRAHpJtN55a",
      "clientSecret": "82AbnUuyJJk7RoK4uJ0h7SSPhBi5Ho",
      "authorizationURL": "https://localhost/oauth/authorize",
      "tokenURL": "https://localhost/oauth/token/",
      "callbackURL": "http://localhost:7070/api/auth/callback",
      "userProfileURL": "http://localhost/myprofile"
    };

    passport.use(new WPOAuthStrategy(oauthConfig,
        function(accessToken, refreshToken, profile, callback) {
            console.log('profile', profile);
            callback(undefined, {
                id: '56757dsfe22',
                email: 'dummy@example.com'
            });
        }
    ));

    app.get('/auth/callback',
        passport.authenticate('wpoauth', { failureRedirect: '/api/login' }),
        function(req, res) {
            console.log('success');
            // Successful authentication, redirect home.
            res.redirect('/');
        });    
}

function handleAuthenticate(req, res, next) {
    console.log('xxxx', 'handleAuthenticate');
    passport.authenticate('wpoauth')(req, res, next);
}

function initRoutes(app) {
    app.get(/.*/, handleAuthenticate) ;

    app.get('/auth/callback',
        passport.authenticate('wpoauth', { failureRedirect: '/api/login' }),
        function(req, res) {
            console.log('success');
            // Successful authentication, redirect home.
            res.redirect('/');
        }); 
}

var app = express();
var router = express.Router();

app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

initPassport(app);

app.use('/api/', router);
initRoutes(router);
  

Примечание. Я также пытался напрямую использовать модуль passport-oauth2, доходя до экрана входа в систему, но после входа в систему и отправки обратно на http://localhost:7070/api/auth/callback URL-адрес я получаю сообщение об ошибке:

 TokenError: Authorization code doesn't exist or is invalid for the client
  

И идентификатор клиента, и clientSecret соответствуют тому, что указано в пользовательском интерфейсе администратора WordPress для «WP OAuth Server».

Использование WP OAuth Server 3.2.0001, с Nginx и WP 4.6.1

Ответ №1:

Просмотр исходного кода пакета ‘passport-wpoauth‘ показывает, что ‘redirectUri’ ожидается как часть тела запроса, а не из настроек, переданных в качестве опций, как я и ожидал.

Я изменил свой код на:

 app.get('/auth/wordpress', function(req, res, next) {
    req.body.redirectUri = 'http://redirectUrl/'
    passport.authenticate('oauth2', {})(req, res, next);
});
  

Проблема была больше из-за других несовместимостей. Я отправил запрос на извлечение в проект.