首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与twitter提供商一起使用Hapijs和Bell。如何使用Bell模块处理来自Twitter的授权拒绝?

与twitter提供商一起使用Hapijs和Bell。如何使用Bell模块处理来自Twitter的授权拒绝?
EN

Stack Overflow用户
提问于 2014-09-22 02:58:29
回答 1查看 1.2K关注 0票数 1

我正在与Twitter一起使用模块的Hapi框架(nodejs)。

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

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

我试图使用相同页面的https://github.com/hapijs/bell#handling-errors中的另一个示例来处理这个场景,但是无法让它正常工作。

代码语言:javascript
复制
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。我仍然不太理解贝尔模块,但可能是推特策略期望oauth_token和oauth_verifier在request.params中,但是被拒绝的param不会被该策略解释,这就是重定向发生的原因。

有人能处理好这种情况吗?

EN

回答 1

Stack Overflow用户

发布于 2014-09-30 00:32:32

我找到了解决办法。这不是一个最佳的解决方案,但至少允许我处理来自Twitter的拒绝。

我不得不修改贝尔模块中的一个文件。在bell/lib/oauth.js中,在oauth_token验证之前

代码语言:javascript
复制
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);

使用该更改,我可以捕获并显示处理程序中的auth错误,而不需要自动重定向。

至少这是我设法让它运转的方式。这种修改的缺点是,如果贝尔模块被更新,那么修改就会丢失,错误再次出现,除非更新的模块已经有了相应的修复。所以,你得盯着它。

下面是我在贝尔存储库上创建的关于这个bug的Github问题链接。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25966130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档