有人能帮我解决链接GitHub oauth2-provider server与passport-oauth2 consumer中的以下代码的问题吗
在我使用http://localhost:8082
登录并到达回拨URL后:http://localhost:8081/auth/provider/callback
,则抛出错误
var express = require('express')
, passport = require('passport')
, util = require('util')
, TwitterStrategy = require('passport-twitter').Strategy;
var TWITTER_CONSUMER_KEY = "--insert-twitter-consumer-key-here--";
var TWITTER_CONSUMER_SECRET = "--insert-twitter-consumer-secret-here--";
passport.serializeUser(function(user, done) {
done(null, user);
});
passport.deserializeUser(function(obj, done) {
done(null, obj);
});
passport.use(new TwitterStrategy({
consumerKey: TWITTER_CONSUMER_KEY,
consumerSecret: TWITTER_CONSUMER_SECRET,
callbackURL: "http://127.0.0.1:3000/auth/twitter/callback"
},
function(token, tokenSecret, profile, done) {
// asynchronous verification, for effect...
process.nextTick(function () {
return done(null, profile);
});
}
));
var app = express.createServer();
// configure Express
app.configure(function() {
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.use(express.logger());
app.use(express.cookieParser());
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.session({ secret: 'keyboard cat' }));
app.use(passport.initialize());
app.use(passport.session());
app.use(app.router);
app.use(express.static(__dirname + '/public'));
});
app.get('/', function(req, res){
res.render('index', { user: req.user });
});
app.get('/account', ensureAuthenticated, function(req, res){
res.render('account', { user: req.user });
});
app.get('/login', function(req, res){
res.render('login', { user: req.user });
});
app.get('/auth/twitter',
passport.authenticate('twitter'),
function(req, res){
// The request will be redirected to Twitter for authentication, so this
// function will not be called.
});
app.get('/auth/twitter/callback',
passport.authenticate('twitter', { failureRedirect: '/login' }),
function(req, res) {
res.redirect('/');
});
app.get('/logout', function(req, res){
req.logout();
res.redirect('/');
});
app.listen(3000);
function ensureAuthenticated(req, res, next) {
if (req.isAuthenticated()) { return next(); }
res.redirect('/login')
}
内部OAuthError:无法获取访问令牌
如何解决此问题?
7条答案
按热度按时间jxct1oxe1#
我在尝试运行passport-oauth2时遇到了类似的问题,正如您所观察到的,错误消息没有多大帮助:
我发现a suggestion对passport-oauth2做了一个小的修改:
一旦我这样做了,我得到了一个更有帮助的错误消息:
在我的案例中,我认为根本原因是我测试的授权服务器使用了自签名SSL证书,我可以通过添加以下行来解决这个问题:
von4xj4u2#
同样,我也遇到了同样的问题。最后,我找到了一个解决方案与企业代理有关,您可以查看变通方案here
u5i3ibmn3#
对于任何仍在为此而挣扎的人来说,在
node-oauth
包中提到了here。基本上,在更快的连接上,
node-oauth
接收ECONNRESET
并触发提供的回调两次。解决这个问题的一个快速方法是在错误侦听器中的node_modules/oauth/lib/oauth2.js
的第161行附近添加一行:2021年11月有already a PR关于这个问题,但是还没有合并,好像
node-oauth
已经不维护了,过去2个工作日我都在为这个问题挠头,希望大家能找到答案。EDIT:PR已于2022年7月23日合并,但passport-oauth2和passport-google-oauth2中的依赖版本尚未更新。passport-oauth2 issue和passport-google-oauth2 issue
lh80um4z4#
我认为您需要先获得TWITTER_CONSUMER_KEY和TWITTER_CONSUMER_SECRET。
How to obtain Twitter Consumer Key
然后将其插入到代码中。
zzlelutf5#
我也遇到过同样的问题,我在使用cookie-session时,问题是我在回调中错误地返回了一个未定义的对象。
arknldoa6#
我在GitHub认证中遇到了同样的问题,我发现添加中间件可以帮助解决这个问题,请查看下面的示例:-
请注意:-这可能不是最好的解决方案,但对我来说很好。谢谢!祝你有一个美好的代码日:)
z31licg07#
我在使用多个策略进行Passport(Spotify & Google)时也面临着同样的问题,在调查了一段时间这个问题后,我在Github上发现了这个修复这个问题的Open PR。
这是
passport-oauth2
上的一个已知问题,解决方案(直到PR被批准)是通过向我的项目包中添加一个覆盖来强制passport-oauth2
使用oauth@0.10.0
。json:那将修正你的错误。