12

Backbone に関するいくつかの記事を読んでいて、その多くがトークンとキーについて話しているため、Backbone を使用してユーザーを認証する方法についてかなり長い間疑問に思っていました..しかし、サインインできるようにしたいだけです。ユーザーを作成し、通常どおりユーザーを登録します。

Webアプリの起動時にルート「/ me」へのリクエストがあり、ユーザーがログインしている場合、サーバーは適切な情報をユーザーに返すと考えていました.

ルートが{loggedIn: false}バックボーン ルーターで戻ってきた場合と同様に、ユーザーはログイン/登録ページのみに送信されます。しかし、ユーザーのプロファイル情報が返ってきた場合、明らかにセッションがあったことを意味します。

Backbone を使用している場合、これはユーザー認証を元に戻す良い方法ですか?

4

1 に答える 1

32

簡単な答え: $.ajax を接続して、401 (未承認) ステータス コードに応答します。

長い回答: 単一ページの Web サイトから RESTful API を使用しています。サーバーが無許可のリクエストを検出すると、401 を返すだけです。クライアントは /login?#requested/resource にリダイレクトします。

/login認証を求めるプロンプトが表示され (この場合は Google の宣誓サーバーにリダイレクトされます)、認証 Cookie が追加され、最初に要求された場所にリダイレクトされます。#requested/resource

また、$.ajax リクエストごとに認証 Cookie を送信しています。

うまくいけば、これは役に立ちます。

define(
    [
        'jquery',
        'jquery.cookie'
    ],
    function ($) {
        var redirectToLogin = function () {
            var locationhref = "/login";
            if (location.hash && location.hash.length > 0) {
                locationhref += "?hash=" + location.hash.substring(1);
            }
            location.href = locationhref;
        };

        var $doc = $(document);
        $doc.ajaxSend(function (event, xhr) {
            var authToken = $.cookie('access_token');
            if (authToken) {
                xhr.setRequestHeader("Authorization", "Bearer " + authToken);
            }
        });

        $doc.ajaxError(function (event, xhr) {
            if (xhr.status == 401)
                redirectToLogin();
        });
    });
于 2012-07-06T20:33:15.910 に答える