OAuth 401 "access_denied" из API Patreon
Я действительно озадачен этим, поэтому любая помощь или указатели будут приветствоваться. Я следую за этой документацией:
https://www.patreon.com/platform/documentation/oauth
Я пробежал все необходимые звонки в Почтальоне и получил доступ к API. Затем, когда я попытался запустить его через приложение Node.js / Express и начал получать следующий ответ, как только я использовал токен одноразового использования (шаг 3 в указанной документации):
{
"error": "access_denied"
}
Затем я взял одноразовый код, который отправлялся в мое приложение, и вставил его в параметры в Postman, и я получил тот же результат (ошибка 401). Только когда я изменил redirect_url на скрипт php (на удаленном сервере), а затем использовал этот одноразовый код с почтальоном, я получил ответ 200.
Следующие...
www.patreon.com/oauth2/authorize?response_type=code&client_id=###&redirect_uri=http://www.somesite.com/script.php
... дает мне рабочий код и...
www.patreon.com/oauth2/authorize?response_type=code&client_id=#####&redirect_uri=http://localhost.com
дает мне код, который не работает.
Я делаю оба последующих звонка для почтальона oauth от Почтальона, поэтому я немного растерялся относительно того, почему это происходит.
Я очень новичок в Node.js и Express, но я работал с oauth и api вообще в течение некоторого времени.
Вещи, которые я пробовал:
- Использование url shortner для URL перенаправления
- использование точечного квадрата вместо localhost
Заранее спасибо,
roscminni
РЕДАКТИРОВАТЬ:
Вот код узла, который получает перенаправление
var express = require('express');
var router = express.Router();
router.route('/valid').get(function(req, res){
console.log("CODE");
console.log(req.query.code);
res.redirect("http://google.com");
});
А вот и app.js
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var session = require('express-session');
var valid = require('./routes/valid');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
// uncomment after placing your favicon in /public
//app.use(favicon(__dirname + '/public/favicon.ico'));
app.use(logger('dev'));
app.use(session({
secret: 'keyboard cat'
}));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/valid',valid);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
// error handlers
// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: err
});
});
}
// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: {}
});
});
module.exports = app;
1 ответ
Итак, проблема в том, что аргумент redirect_url должен быть одинаковым во всех вызовах API.
Итак, я звонил:
1st call: /oauth/?redirect_url=http://foo.foo/bar
Next call: /oauth/?redirect_url=http://foo.foo/foo
Но мне нужно было сделать это:
1st call: /oauth/?redirect_url=http://foo.foo/bar
Next call: /oauth/?redirect_url=http://foo.foo/bar
Похоже, что перенаправление должно быть одинаковым для всех вызовов oauth в API-интерфейсе patreon, которые должны иметь одинаковый redirect_url.