1

Twitter プロバイダーと連携して、 BellモジュールでHapi フレームワーク (nodejs) を使用しています。

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を期待している可能性がありますが、拒否されたパラメーターは戦略によって解釈されないため、リダイレクトが発生します。

誰かがこのシナリオを処理できましたか?

4

1 に答える 1

1

回避策を見つけました。これは最適な解決策ではありませんが、少なくとも Twitter からの拒否を処理することができます。

bell モジュール内のファイルを変更する必要がありました。では、 oauth_tokenbell/lib/oauth.jsの検証前に

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);

その変更により、自動リダイレクトなしで、ハンドラーで認証エラーをキャッチして表示できます。

少なくともこれは私がそれを機能させる方法です。この変更の短所は、bell モジュールが更新された場合、変更が失われ、更新されたモジュールに既に修正が含まれていない限り、バグが再び発生することです。だから、あなたはそれを監視しなければなりません。

これは、このバグに関して Bell リポジトリで作成したGithub issueからのリンクです。

于 2014-09-30T00:32:32.583 に答える