gpt4 book ai didi

node.js - 将 Hapijs 和 Bell 与 Twitter 提供商一起使用。如何使用 Bell 模块处理 Twitter 的授权拒绝?

转载 作者:太空宇宙 更新时间:2023-11-04 01:02:25 24 4
gpt4 key购买 nike

我正在使用 Hapi 框架 (nodejs) 和 Bell模块,与 Twitter 提供商合作。

使用 github 页面中给出的示例获得工作代码非常简单。我访问 /login 路线,然后被重定向到 Twitter,在那里我授权该应用程序,然后我被重定向回 /login?oauth_token=xxxxxxx&oauth_verifier=xxxxxxx ,在那里我可以访问 request.auth.credentials 中的用户配置文件。

当我尝试拒绝该应用程序时,问题就出现了。我没有点击 Twitter 上的“登录”按钮,而是点击了“取消”按钮,然后点击了“返回网站名称”按钮。最后一个按钮将我重定向到 /login?denied=xxxxxx,然后我(再次)重定向到 Twitter 以批准该应用。

我尝试使用同一页面中的另一个示例 https://github.com/hapijs/bell#handling-errors 来处理这种情况。但无法让它工作。

server.route({
method: ['GET', 'POST'],
path: '/login',
config: {
auth: {
strategy: 'twitter',
mode: 'try'
},
handler: function (request, reply) {

if (!request.auth.isAuthenticated) {
return reply('Authentication failed due to: ' + request.auth.error.message);
}

return reply.redirect('/home');
}
}
});

似乎在检查 request.auth 之前它会解释/login 路由并重定向到 Twitter。我仍然不太了解 Bell 模块,但 Twitter 策略可能需要 request.params 中的 oauth_tokenoauth_verifier,但是 策略不会解释拒绝的参数,这就是发生重定向的原因。

有人设法处理这种情况吗?

最佳答案

我找到了解决方法。这不是最佳解决方案,但至少可以让我处理 Twitter 的拒绝。

我必须修改响铃模块内的一个文件。在bell/lib/oauth.js中,在验证oauth_token

之前
exports.v1 = function (settings) {

var client = new internals.Client(settings);

return function (request, reply) {

var cookie = settings.cookie;
var name = settings.name;

// Sign-in Initialization

// Verify if app (Twitter) was rejected
if (name=='twitter' && request.query.denied) {
return reply(Boom.internal('App was rejected'));
}

if (!request.query.oauth_token) {

// Obtain temporary OAuth credentials

var oauth_callback = request.server.location(request.path, request);

通过这一更改,我可以在处理程序中捕获并显示身份验证错误,而无需自动重定向。

至少这是我设法让它发挥作用的方式。此修改的缺点是,如果更新了响铃模块,则修改会丢失并且错误会再次出现,除非更新的模块已经对此进行了修复。所以,你必须留意这一点。

这是 Github issue 的链接我在贝尔存储库上创建了有关此错误的信息。

关于node.js - 将 Hapijs 和 Bell 与 Twitter 提供商一起使用。如何使用 Bell 模块处理 Twitter 的授权拒绝?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25966130/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com