Javascript-форум (https://javascript.ru/forum/)
-   Angular.js (https://javascript.ru/forum/angular/)
-   -   Проверка авторизхации пользователя при старте (https://javascript.ru/forum/angular/51537-proverka-avtorizkhacii-polzovatelya-pri-starte.html)

Shasoft 10.11.2014 15:18

Проверка авторизхации пользователя при старте
 
Ситуация такая. При авторизации я записываю в куку token, а в свой сервис Auth имя пользователя и его id.
Куда лучше вставить проверку при следующем открытии страницы?
Т.е. пользователь отклыл сайт и у него есть token. Однако он уже может быть невалиден и мне нужно это проверить (и если он валиден, то вернуть с сервера ID и имя пользователя).

Как вариант делать это в моем сервисе Auth при его создании. Но может это нужно делать в config или еще каком месте? Как это делается по-нормальному (т.е. по правильному)?

Tek 10.11.2014 15:42

можно слушать событие роутинга в run или конфиге:
$rootScope.$on('$routeChangeStart', function (event, next) {
    Auth.loginCheck(next);
});

Shasoft 10.11.2014 16:02

Tek,
Я плохо объяснил :)

Когда я писал про открыл "страницу сайта", то я имел ввиду следующий процесс:
Пользователь открыл сайт, авторизовался. Потом закрыл БРАУЗЕР. На следующий день открыл БРАУЗЕР и в нем открыл сайт. Вот когда он вновь зашел на сайт, то нужно проверить валидный у него токен в кукисах или нет и при этом вернуть барузеру данные о пользователе, если токен валидный.

А насколько я понимаю, ваше решение позволяет проверять авторизацию при переходе между страницами сайта. Такого не нужно. Валидность токена проверяется при входе на сайт и все. При переходе между страницами проверять не нужно.

Tek 10.11.2014 16:14

Эм, если вы говорите про rest модель, то это работает немного не так. Rest - протокол без состояний поэтому на любой запрос на бэкэнд отправляется token, если ключ не валидный бэк кидает ошибку. В конфиге вешается перехватчик который следит смотрит что не пришел 401 (или 511 - обычно) ответ. Если пришел просим пользователя перелогиниться.

Shasoft 10.11.2014 16:31

Схема именно такая и планируется (не всё еще сделал). Однако на клиенте нужно знать пользователь активен или нет. И если нет, то показывать/скрывать некоторые пункты меню.
Хотя, если подумать, то возможно на клиенте и действительно ничего кроме токена не нужно будет.

Tek 10.11.2014 16:49

ну если на клиенте не ведется тотальное кэширование всего и вся (если ведется то непонятно зачем), то при загрузке приложения будет как минимум 1ин запрос, он то и даст понять статус пользователя.

Deff 10.11.2014 16:49

Shasoft,
На клиента отсылаете элемент активности
Типично их несколько
К примеру Фразы:
Привет Ник, Либо привет Гость,
Прописывают так же, достаточно часто стартовый ява-скрипт параметров в хидере
var GroupID = 'User' или var GroupID = 'Guest'
Очевидно в главном меню либо Регистрация и Войти
- либо
Выход

И т.д.

Shasoft 10.11.2014 17:27

Deff,
так весь вопрос когда запрашивать этот элемент активности при заходе на сайт. Т.е. есть ли специальное место для такого в angular или можно где попало это делать.


Часовой пояс GMT +3, время: 04:37.