Подтвердить что ты не робот

Backbone.js и аутентификация пользователя

Я давно задавался вопросом, как я буду проверять пользователей с помощью Backbone, потому что я читал несколько статей об этом, и многие из них говорят о токенах и ключах. Но я просто хочу быть в состоянии для входа в систему и регистрации пользователя, как обычно.

Я думал, что при запуске веб-приложения появится запрос на маршрут '/me', а затем сервер предоставит пользователю соответствующую информацию, если он/она вошли в систему.

Как если бы маршрут вернулся с {loggedIn: false}, базовый маршрутизатор отправил бы пользователя только на страницы входа/регистрации. Но если бы он вернулся с информацией о профиле пользователей, это означало бы, что у него была сессия.

Является ли это хорошим способом возврата аутентификации пользователя при использовании Backbone?

4b9b3361

Ответ 1

Короткий ответ: подключите $.ajax для ответа на 401 (неавторизованные) коды состояния.

Длинный ответ: мы потребляем RESTful api с одного веб-сайта. когда сервер обнаруживает несанкционированный запрос, он просто возвращает 401. Клиент будет перенаправлен на /login? # request/resource.

/login будет запрашивать авторизацию (перенаправлять на сервер клятв Google в нашем случае), затем добавить файл cookie авторизации и перенаправить на первоначально запрошенный #requested/resource

мы также отправляем файл cookie auth на каждый запрос $.ajax.

Надеюсь, это поможет.

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