Rem1te
pa[aad
state params
так у тебя нету state params, ты же $state выводишь, напиши в конструкторе console.log('bla bla bla')
T.A
не выходит ничего
T.A
ни в конструкторе
T.A
не в ините
Rem1te
есть у него стейт, он его в коснтрукторе присваивает, вопрос в том что у него этот компонент(директика) или че там, не инициализируется
T.A
pa[aad
ни в конструкторе
проблема тогда не в нем, мож ты не добавил контроллер module/component ?
а component в модуль ?
pa[aad
короче мы не видим всей картины, это гадание на фиг знает чем
T.A
Valera
Привет
Valera
Кто-то может подсказать, возможно ли перед запуском приложения выполнить http ?
Valera
То есть пришел результат, записали в переменную и тогда начало работать приложение
Bogdan
Не, нельзя такое
Bogdan
https://stackoverflow.com/questions/19654195/http-request-before-angularjs-app-initialises
Bogdan
Хотя такое вот есть, вроде
Valera
Ну в чем суть
Как-то при запуске приложения, надо проверить, авторизован ли юзер
Valera
И выходит так, что контроллер успевает загрузиться, а только потом приходит ответ от сервера
Valera
Это есть
Valera
Например, авторизованный юзер не должен попадать на страницу регистрации
Valera
А получается так, что сначала она открывается, а потом только приложение понимает, что юзер авторизован
Bogdan
Valera
Слушатель транзакции - это?
Valera
)
Bogdan
Слушатель транзакции - это?
у ui-router можно повесить слушатели на события смены текущего стейта
там оно транзакциями называется, вроде
Valera
Уточню, ошибка только при первом прямом переходе на страницу регистрации
Если загрузить сначала на другую страницу, а потом перейти на регистрацию, то всё ок
Valera
Мне бы вот в app.run проверить это всё один раз и потом оно нормально работать будет
Valera
не
всё запускается
Valera
Но отрабатывает так:
Начало http запроса
Загрузился контроллер
Ответ от http
Bogdan
ну я бы на твоем месте таким костылизированием не занимался :)
Bogdan
все таки в ui-router есть все инструменты для этого
pa[aad
Valera
хотя да
как вариант
сейчас попробую так
pa[aad
у меня как-то так
const canAccess = AuthService.isAuth()
&& state.authorize
&& state.authorize === true
&& AuthService.getUser().role === routeRole;
if (!canAccess) {
Notification.error(Loc.get('auth').n_not_auth);
$state.go('index');
return false;
}это в $transitions.onStart({}, transition => {
Bogdan
Valera
всё равно баг выходит
если юзер авторизовался, в storage записались данные, что всё ок. Потом он пришел через день (естественно, уже срок авторизации истек), открыл сходу главную страницу (там нет никаких запросов). И будет отображаться кнопка Выход, вместо кнопки Вход
pa[aad
Nikita
Я тоже ломал голову над сессиями, но потом понял что это все фигня. Я сделал так. У кажого юзера в бд есть запись session_generation. В жвт-токене хранится айди юзера и поколение сессии. На каждый рест запрос в бекенде я проверяю актуальность юзера. При таких операциях. как удаление юзера, блокировка его аккаунта или смена пароля увеличивается session_generation, от чего все предыдущие токены делаются невалидными. Выборка по айди из бд стоит копейки, даже если юзеров будет миллион. Если какой-то запрос вернул ошибку инвалидации токена, то стираю все с локалсторадж и роутю на логин. Цена всего этого, что надо на каждый запрос лезть в бд и смотреть как там у юзера дела, немного ухудшает ситуацию то, что это spa приложение и для формирования страницы надо делать много запросов.
Bogdan
Bogdan
pa[aad
Я тоже ломал голову над сессиями, но потом понял что это все фигня. Я сделал так. У кажого юзера в бд есть запись session_generation. В жвт-токене хранится айди юзера и поколение сессии. На каждый рест запрос в бекенде я проверяю актуальность юзера. При таких операциях. как удаление юзера, блокировка его аккаунта или смена пароля увеличивается session_generation, от чего все предыдущие токены делаются невалидными. Выборка по айди из бд стоит копейки, даже если юзеров будет миллион. Если какой-то запрос вернул ошибку инвалидации токена, то стираю все с локалсторадж и роутю на логин. Цена всего этого, что надо на каждый запрос лезть в бд и смотреть как там у юзера дела, немного ухудшает ситуацию то, что это spa приложение и для формирования страницы надо делать много запросов.
я б такого не стал делать, люди же jwt придумали, а тут вы такое городите что ужас
Bogdan
jwt придумали для того что бы в БД ничего не хранить, а тут и jwt и БД пихают) Я фигею)))
Denis
Bogdan
Sasha
Sasha
Да я вижу, бывает. Надеюсь, одумается
Igor
Ну как бы это стандартный подход, когда нужно инвалидировать jwt
Sasha
Igor
Igor
Либо хоть где-нибудь
Bogdan
Так зачем тогда jwt использовать?
Sasha
Хранить в базе
Не согласен. Допустим у тебя несколько приложений и SSO, протух токен - и даже если на странице нет никаких запросов, то всегда делается какой-то запрос к API для проверки. Это вроде и есть стандартная схема
Sasha
Хранить состояние - это странно
Bogdan
По хорошему, было бы неплохо куки для этого использоать
тем более, там задать срок жизни можно же
Igor
Bogdan
Это уже другой вопрос
та это основной вопрос)))))
зачем декодируемый jwt, если его дополнительно в БД нужно хранить) Глупости неимоверные
Sasha
Тут дело не в jwt. Есть конкретно стейтфул и стейтлесс. И уже в зависимости от задуманной архитектуры приложения решаем. Если мы хотим стейтлесс - то никаких состояний не храним, а в случае со страницами без запросов - просто кидаем на какой-нибудь чек эндпоинт
Sasha
А можно и не делать, потому что так или иначе, любой экшен от пользователя потребует актуального токена. Так что, 401 он получит очень скоро
Igor
Лень спорить, просто погуглите, как делается инвалидация jwt. Или вы предлагаете его вообще не юзать, если надо инвалидировать?
Igor
Хранить можно не все jwt, а именно протухшие, но у которых ещё время жизни не вышло
Sasha
Инвалидация jwt на стороне клиента - это просто удалить его из локалсторейджа.
Sasha
Хранение состояния в бд - совершенно другая система аутентификации.
Sasha
Более того, на самом SSO мы всегда можно удалить access токен текущий
Bekbolot
Всем привет
Igor
Bekbolot
Могу ли я пишу здесь по английски?
Bekbolot
I have a problem with project which developing with AngularJS
Bekbolot
My problem with links which shared to social sites and messengers
pa[aad
Bekbolot
As we know the site which developed with AngularJS it works dynamically so when users share link of my site to the Facebook (for example Facebook) then Facebook sends request to my site (link which shared user) for get informations about my page
Bekbolot
So facebook can't give any information about my page (my link) because my site works dynamically it works with JS. It gets informations when open with browser
pa[aad