2014-09-16 2 views
2

Как я могу гарантировать, что пользователь выполнил вход в систему до того, как я сделаю просмотр с использованием loopback? Я могу loggin в передней части, используя мое угловое приложение. Но я хотел заблокировать анонимных пользователей от просмотра страницы.loopback защищенные маршруты/обеспечить логин

Я думал, что это будет заголовок, что-то вроде headers.authorization_token, но он, похоже, не существует.

Я ищу что-то вроде connect-обеспечитьlogin для паспорта, без необходимости использовать паспорт.

ответ

1

Вот один из возможных подходов, который работал для меня (детали могут отличаться):

  1. Дизайн каждой из страниц в одной странице Угловая App, чтобы сделать на одном из ваших REST вызовов API, когда Угловая Маршрут разрешен.

  2. Защитите все ваши маршруты REST API, используя схему AccessToken/User/Role/ACL, которую предоставляет LoopBack.

  3. Если на стороне сервера REST не обнаружен действительный токен доступа, пропустите 401 Несанкционированную ошибку.

  4. При доступе к данным на стороне клиента, когда вы обнаруживаете 401 в своем REST Call, переадресовывайте свой логический маршрут.

  5. Для плавной User Experience, когда вы перенаправлять Войдите, хранить маршрут Пользователь хочет получить доступ глобально (localStore, $ RootScope и т.д.) и перенаправлять туда, когда пользователь зайдет и получает действительный Токен доступа.

Вот пример LoopBack Контроль доступа: https://github.com/strongloop/loopback-example-access-control

4

Это $ перехватчик, который решает вашу проблему.

Этот код определяет 401 ответов (пользователь не вошел в систему или маркер доступа истек) с сервера Loopback REST и перенаправить пользователя на страницу входа в систему:

// Inside app config block 
$httpProvider.interceptors.push(function($q, $location) { 
    return { 
    responseError: function(rejection) { 
     if (rejection.status == 401) { 
     $location.nextAfterLogin = $location.path(); 
     $location.path('/login'); 
     } 
     return $q.reject(rejection); 
    } 
    }; 
}); 

И этот код будет перенаправлять на запрашиваемую страницу как только пользователь зарегистрирован в

// In the Login controller 
User.login($scope.credentials, function() { 
    var next = $location.nextAfterLogin || '/'; 
    $location.nextAfterLogin = null; 
    $location.path(next); 
});