Rem1te
помогите пожалуйста. можете сказать, что не так? в консоли не выходит ничего
Проверь срабатывает ли коснтруктор, проверь что срабатывает он инит
pa[aad
state params
так у тебя нету state params, ты же $state выводишь, напиши в конструкторе console.log('bla bla bla')
T.A
не выходит ничего
T.A
ни в конструкторе
T.A
не в ините
Rem1te
есть у него стейт, он его в коснтрукторе присваивает, вопрос в том что у него этот компонент(директика) или че там, не инициализируется
pa[aad
ни в конструкторе
проблема тогда не в нем, мож ты не добавил контроллер module/component ? а component в модуль ?
pa[aad
короче мы не видим всей картины, это гадание на фиг знает чем
Valera
Привет
Valera
Кто-то может подсказать, возможно ли перед запуском приложения выполнить http ?
Valera
То есть пришел результат, записали в переменную и тогда начало работать приложение
Bogdan
Не, нельзя такое
Bogdan
https://stackoverflow.com/questions/19654195/http-request-before-angularjs-app-initialises
Bogdan
Хотя такое вот есть, вроде
Valera
Ну в чем суть Как-то при запуске приложения, надо проверить, авторизован ли юзер
Valera
И выходит так, что контроллер успевает загрузиться, а только потом приходит ответ от сервера
Bogdan
Ну в чем суть Как-то при запуске приложения, надо проверить, авторизован ли юзер
дождись ответа от сервера на любой запрос там должна быть ошибка, если сессия устарела внедри в $http interceptor и обрабатывай ошибку
Valera
Это есть
Valera
Например, авторизованный юзер не должен попадать на страницу регистрации
Valera
А получается так, что сначала она открывается, а потом только приложение понимает, что юзер авторизован
Bogdan
Valera
Слушатель транзакции - это?
Valera
)
Bogdan
Слушатель транзакции - это?
у ui-router можно повесить слушатели на события смены текущего стейта там оно транзакциями называется, вроде
Valera
Уточню, ошибка только при первом прямом переходе на страницу регистрации Если загрузить сначала на другую страницу, а потом перейти на регистрацию, то всё ок
Valera
Мне бы вот в app.run проверить это всё один раз и потом оно нормально работать будет
Bogdan
Мне бы вот в app.run проверить это всё один раз и потом оно нормально работать будет
не, так не получится run запускается раньше, чем появляется $http объект но могу и ошибаться, загугли
Valera
не всё запускается
Valera
Но отрабатывает так: Начало http запроса Загрузился контроллер Ответ от http
Bogdan
ну я бы на твоем месте таким костылизированием не занимался :)
Bogdan
все таки в ui-router есть все инструменты для этого
pa[aad
Но отрабатывает так: Начало http запроса Загрузился контроллер Ответ от http
у меня сделано так, пользователь авторизировался на сайте и потом это пишется у storage дальше у $transitions.onStart вроде проверяю у сервисе авторизован ли он как-то так уже и не помню, нужно глянуть
Valera
у меня сделано так, пользователь авторизировался на сайте и потом это пишется у storage дальше у $transitions.onStart вроде проверяю у сервисе авторизован ли он как-то так уже и не помню, нужно глянуть
Думал так же. Но если юзер авторизовался, в storage записались данные, что всё ок. Потом он пришел через день (естественно, уже срок авторизации истек), открыл сходу какую-то страницу с лк и отобразилось то, что не должно
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 => {
Valera
всё равно баг выходит если юзер авторизовался, в storage записались данные, что всё ок. Потом он пришел через день (естественно, уже срок авторизации истек), открыл сходу главную страницу (там нет никаких запросов). И будет отображаться кнопка Выход, вместо кнопки Вход
Nikita
Я тоже ломал голову над сессиями, но потом понял что это все фигня. Я сделал так. У кажого юзера в бд есть запись session_generation. В жвт-токене хранится айди юзера и поколение сессии. На каждый рест запрос в бекенде я проверяю актуальность юзера. При таких операциях. как удаление юзера, блокировка его аккаунта или смена пароля увеличивается session_generation, от чего все предыдущие токены делаются невалидными. Выборка по айди из бд стоит копейки, даже если юзеров будет миллион. Если какой-то запрос вернул ошибку инвалидации токена, то стираю все с локалсторадж и роутю на логин. Цена всего этого, что надо на каждый запрос лезть в бд и смотреть как там у юзера дела, немного ухудшает ситуацию то, что это spa приложение и для формирования страницы надо делать много запросов.
pa[aad
Я тоже ломал голову над сессиями, но потом понял что это все фигня. Я сделал так. У кажого юзера в бд есть запись session_generation. В жвт-токене хранится айди юзера и поколение сессии. На каждый рест запрос в бекенде я проверяю актуальность юзера. При таких операциях. как удаление юзера, блокировка его аккаунта или смена пароля увеличивается session_generation, от чего все предыдущие токены делаются невалидными. Выборка по айди из бд стоит копейки, даже если юзеров будет миллион. Если какой-то запрос вернул ошибку инвалидации токена, то стираю все с локалсторадж и роутю на логин. Цена всего этого, что надо на каждый запрос лезть в бд и смотреть как там у юзера дела, немного ухудшает ситуацию то, что это spa приложение и для формирования страницы надо делать много запросов.
я б такого не стал делать, люди же jwt придумали, а тут вы такое городите что ужас
Bogdan
jwt придумали для того что бы в БД ничего не хранить, а тут и jwt и БД пихают) Я фигею)))
Sasha
jwt придумали для того что бы в БД ничего не хранить, а тут и jwt и БД пихают) Я фигею)))
Не только jwt, куча разных видов токенов с пэйлоадом. Вообще - это разный подход: stateless vs stateful.
Sasha
а зачем их соединять)
Незачем, это изврат
Bogdan
Незачем, это изврат
а выше человек соединил)))))))))))))
Sasha
Да я вижу, бывает. Надеюсь, одумается
Igor
Ну как бы это стандартный подход, когда нужно инвалидировать jwt
Igor
какой?
Хранить в базе
Igor
Либо хоть где-нибудь
Bogdan
Так зачем тогда jwt использовать?
Sasha
Хранить в базе
Не согласен. Допустим у тебя несколько приложений и SSO, протух токен - и даже если на странице нет никаких запросов, то всегда делается какой-то запрос к API для проверки. Это вроде и есть стандартная схема
Sasha
Хранить состояние - это странно
Bogdan
По хорошему, было бы неплохо куки для этого использоать тем более, там задать срок жизни можно же
Igor
Так зачем тогда jwt использовать?
Это уже другой вопрос
Bogdan
Это уже другой вопрос
та это основной вопрос))))) зачем декодируемый jwt, если его дополнительно в БД нужно хранить) Глупости неимоверные
Sasha
Тут дело не в jwt. Есть конкретно стейтфул и стейтлесс. И уже в зависимости от задуманной архитектуры приложения решаем. Если мы хотим стейтлесс - то никаких состояний не храним, а в случае со страницами без запросов - просто кидаем на какой-нибудь чек эндпоинт
Sasha
А можно и не делать, потому что так или иначе, любой экшен от пользователя потребует актуального токена. Так что, 401 он получит очень скоро
Igor
Лень спорить, просто погуглите, как делается инвалидация jwt. Или вы предлагаете его вообще не юзать, если надо инвалидировать?
Igor
Хранить можно не все jwt, а именно протухшие, но у которых ещё время жизни не вышло
Sasha
Инвалидация jwt на стороне клиента - это просто удалить его из локалсторейджа.
Sasha
Хранение состояния в бд - совершенно другая система аутентификации.
Igor
Инвалидация jwt на стороне клиента - это просто удалить его из локалсторейджа.
Юзер говорит, что у него украли токен, и вор сидит под ним пока срок жизни не истечет
Sasha
Юзер говорит, что у него украли токен, и вор сидит под ним пока срок жизни не истечет
Access токены как правило имеют очень короткий период жизни, а рефреш токен мы все равно клиенту не отдаем
Sasha
Более того, на самом SSO мы всегда можно удалить access токен текущий
Bekbolot
Всем привет
Bekbolot
Могу ли я пишу здесь по английски?
Bekbolot
I have a problem with project which developing with AngularJS
Bekbolot
My problem with links which shared to social sites and messengers
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