#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);
});
Проблема была больше из-за других несовместимостей. Я отправил запрос на извлечение в проект.