Настольные приложения поддерживают только значение oauth_callback 'oob'/oauth/request_token
Я пытаюсь аутентифицироваться с OAuth на NodeJS, и я получаю эту ошибку:
Ошибка при получении токена запроса OAuth: { statusCode: 401, data: '\n\n Настольные приложения поддерживают только значение oauth_callback \'oob\'\n /oauth/request_token\n\n' }
Вот мой код (server.js)
var express = require('express');
var util = require('util');
var oauth = require('oauth');
var app = express.createServer();
// Get your credentials here: https://dev.twitter.com/apps
var _twitterConsumerKey = "1";
var _twitterConsumerSecret = "2";
var consumer = new oauth.OAuth(
"https://twitter.com/oauth/request_token", "https://twitter.com/oauth/access_token",
_twitterConsumerKey, _twitterConsumerSecret, "1.0A", "http://127.0.0.1:8080/sessions/callback", "HMAC-SHA1");
app.configure('development', function(){
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
app.use(express.logger());
app.use(express.cookieParser());
app.use(express.session({ secret: "very secret" }));
app.use(function(req, res, next) {
res.locals.user = req.session.user;
next();
});
});
app.get('/sessions/connect', function(req, res){
consumer.getOAuthRequestToken(function(error, oauthToken, oauthTokenSecret, results){
if (error) {
res.send("Error getting OAuth request token : " + util.inspect(error), 500);
} else {
req.session.oauthRequestToken = oauthToken;
req.session.oauthRequestTokenSecret = oauthTokenSecret;
res.redirect("https://twitter.com/oauth/authorize?oauth_token="+req.session.oauthRequestToken);
}
});
});
app.get('/sessions/callback', function(req, res){
util.puts(">>"+req.session.oauthRequestToken);
util.puts(">>"+req.session.oauthRequestTokenSecret);
util.puts(">>"+req.query.oauth_verifier);
consumer.getOAuthAccessToken(req.session.oauthRequestToken, req.session.oauthRequestTokenSecret, req.query.oauth_verifier, function(error, oauthAccessToken, oauthAccessTokenSecret, results) {
if (error) {
res.send("Error getting OAuth access token : " + util.inspect(error) + "["+oauthAccessToken+"]"+ "["+oauthAccessTokenSecret+"]"+ "["+util.inspect(results)+"]", 500);
} else {
req.session.oauthAccessToken = oauthAccessToken;
req.session.oauthAccessTokenSecret = oauthAccessTokenSecret;
res.redirect('/home');
}
});
});
app.get('/home', function(req, res){
consumer.get("http://twitter.com/account/verify_credentials.json", req.session.oauthAccessToken, req.session.oauthAccessTokenSecret, function (error, data, response) {
if (error) {
res.redirect('/sessions/connect');
// res.send("Error getting twitter screen name : " + util.inspect(error), 500);
} else {
var parsedData = JSON.parse(data);
// req.session.twitterScreenName = response.screen_name;
res.send('You are signed in: ' + parsedData.screen_name);
}
});
});
app.get('*', function(req, res){
res.redirect('/home');
});
app.listen(8080);
Заранее спасибо.
4 ответа
Заполните поле "URL обратного вызова" в вашей учетной записи разработчика настроек Twitter.
В дополнение к тому, что говорит другой ответ...
Я продолжал получать сообщение об ошибке при попытке заполнить URL-адрес обратного вызова в консоли разработчика Twitter. Я пытался войти http://localhost:4000
, но это давало мне ошибки. Если вам нужно использовать localhost
, ты можешь использовать http://127.0.0.1:4000
вместо этого, и Твиттер принимает это.
(Может быть, это очевидно для некоторых, но мне понадобилось немного времени, чтобы понять это.)
Это старый вопрос, но я столкнулся с этой ошибкой сегодня, и я заметил, что НОВЫЕ приложения Twitter могут быть сохранены БЕЗ URL обратного вызова, но как только вы сохраните свое приложение с URL обратного вызова, Twitter не позволит Вы сохраните его - он вернется к последнему URL, который у вас был. В нашем случае это не имело значения, поскольку наш поток OAuth предоставляет URL-адрес обратного вызова, но что-то на стороне Twitter требует, чтобы был URL-адрес обратного вызова (ЛЮБОЙ URL-адрес обратного вызова). Так что в нашем случае эта ошибка возникала только в средах разработки, с которыми было связано новое (и неиспользованное) приложение Twitter.
Только что наткнулся на это сегодня, надеюсь, это поможет другим.
Если вы пытаетесь пройти аутентификацию Twitter API Authentication через Firebase.
Обязательно добавьте URL-адреса обратного вызова (обязательное поле) в раздел «Аутентификация» на портале разработчиков Twitter API .
Вы можете найти URL-адрес обратного вызова в консоли Firebase в разделе «Аутентификация» (методы входа) Поставщик аутентификации для Twitter.
Убедитесь, что URL-адреса обратного вызова совпадают.
Если нет, это даст вам ошибку, подобную этой:
com.firebase.ui.auth.FirebaseUiException: There was an internal error in the web widget. [ {"code":"auth/invalid-credential","message":"Error getting request token: 403 <?xml version='1.0' encoding='UTF-8'?><errors><error code=\"415\">Callback URL not approved for this client application. Approved callback URLs can be adjusted in your application settings</error></errors>.