@angular_js

Страница 211 из 325
Т.А
12.01.2018
12:45:34
помогите пожалуйста. можете сказать, что не так? в консоли не выходит ничего

Andrey
12.01.2018
12:46:17
что не выводит ? а ты уверен что у тебя контролеер вообще инициализируется ?

Google
Remite
12.01.2018
12:46:46
помогите пожалуйста. можете сказать, что не так? в консоли не выходит ничего
Проверь срабатывает ли коснтруктор, проверь что срабатывает он инит

Andrey
12.01.2018
12:47:39
state params
так у тебя нету state params, ты же $state выводишь, напиши в конструкторе console.log('bla bla bla')

Т.А
12.01.2018
12:48:17
не выходит ничего

ни в конструкторе

не в ините

Remite
12.01.2018
12:48:44
есть у него стейт, он его в коснтрукторе присваивает, вопрос в том что у него этот компонент(директика) или че там, не инициализируется

Andrey
12.01.2018
12:49:02
ни в конструкторе
проблема тогда не в нем, мож ты не добавил контроллер module/component ? а component в модуль ?

короче мы не видим всей картины, это гадание на фиг знает чем

Valera
12.01.2018
20:16:52
Привет

Кто-то может подсказать, возможно ли перед запуском приложения выполнить http ?

То есть пришел результат, записали в переменную и тогда начало работать приложение

Google
Bohdan
12.01.2018
20:32:07
Не, нельзя такое

https://stackoverflow.com/questions/19654195/http-request-before-angularjs-app-initialises

Хотя такое вот есть, вроде

Valera
12.01.2018
20:38:11
Ну в чем суть Как-то при запуске приложения, надо проверить, авторизован ли юзер

И выходит так, что контроллер успевает загрузиться, а только потом приходит ответ от сервера

Bohdan
12.01.2018
20:43:29
Ну в чем суть Как-то при запуске приложения, надо проверить, авторизован ли юзер
дождись ответа от сервера на любой запрос там должна быть ошибка, если сессия устарела внедри в $http interceptor и обрабатывай ошибку

Valera
12.01.2018
20:43:59
Это есть

Например, авторизованный юзер не должен попадать на страницу регистрации

А получается так, что сначала она открывается, а потом только приложение понимает, что юзер авторизован

Bohdan
12.01.2018
20:45:31
Например, авторизованный юзер не должен попадать на страницу регистрации
повесь слушатель тразакции и добавь эту проверку

Valera
12.01.2018
20:45:52
Слушатель транзакции - это?

)

Bohdan
12.01.2018
20:46:33
Слушатель транзакции - это?
у ui-router можно повесить слушатели на события смены текущего стейта там оно транзакциями называется, вроде

Valera
12.01.2018
20:46:37
Уточню, ошибка только при первом прямом переходе на страницу регистрации Если загрузить сначала на другую страницу, а потом перейти на регистрацию, то всё ок

Мне бы вот в app.run проверить это всё один раз и потом оно нормально работать будет

Bohdan
12.01.2018
20:49:44
Мне бы вот в app.run проверить это всё один раз и потом оно нормально работать будет
не, так не получится run запускается раньше, чем появляется $http объект но могу и ошибаться, загугли

Valera
12.01.2018
20:50:14
не всё запускается

Но отрабатывает так: Начало http запроса Загрузился контроллер Ответ от http

Bohdan
12.01.2018
20:51:57
ну я бы на твоем месте таким костылизированием не занимался :)

все таки в ui-router есть все инструменты для этого

Google
Andrey
12.01.2018
20:52:59
Но отрабатывает так: Начало http запроса Загрузился контроллер Ответ от http
у меня сделано так, пользователь авторизировался на сайте и потом это пишется у storage дальше у $transitions.onStart вроде проверяю у сервисе авторизован ли он как-то так уже и не помню, нужно глянуть

Valera
12.01.2018
20:54:59
у меня сделано так, пользователь авторизировался на сайте и потом это пишется у storage дальше у $transitions.onStart вроде проверяю у сервисе авторизован ли он как-то так уже и не помню, нужно глянуть
Думал так же. Но если юзер авторизовался, в storage записались данные, что всё ок. Потом он пришел через день (естественно, уже срок авторизации истек), открыл сходу какую-то страницу с лк и отобразилось то, что не должно

Valera
12.01.2018
20:56:12
хотя да как вариант сейчас попробую так

Andrey
12.01.2018
20:57:58
у меня как-то так 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
12.01.2018
21:00:47
всё равно баг выходит если юзер авторизовался, в storage записались данные, что всё ок. Потом он пришел через день (естественно, уже срок авторизации истек), открыл сходу главную страницу (там нет никаких запросов). И будет отображаться кнопка Выход, вместо кнопки Вход

Mykyta
12.01.2018
21:44:08
Я тоже ломал голову над сессиями, но потом понял что это все фигня. Я сделал так. У кажого юзера в бд есть запись session_generation. В жвт-токене хранится айди юзера и поколение сессии. На каждый рест запрос в бекенде я проверяю актуальность юзера. При таких операциях. как удаление юзера, блокировка его аккаунта или смена пароля увеличивается session_generation, от чего все предыдущие токены делаются невалидными. Выборка по айди из бд стоит копейки, даже если юзеров будет миллион. Если какой-то запрос вернул ошибку инвалидации токена, то стираю все с локалсторадж и роутю на логин. Цена всего этого, что надо на каждый запрос лезть в бд и смотреть как там у юзера дела, немного ухудшает ситуацию то, что это spa приложение и для формирования страницы надо делать много запросов.

Bohdan
13.01.2018
06:29:56
Andrey
13.01.2018
08:09:28
Я тоже ломал голову над сессиями, но потом понял что это все фигня. Я сделал так. У кажого юзера в бд есть запись session_generation. В жвт-токене хранится айди юзера и поколение сессии. На каждый рест запрос в бекенде я проверяю актуальность юзера. При таких операциях. как удаление юзера, блокировка его аккаунта или смена пароля увеличивается session_generation, от чего все предыдущие токены делаются невалидными. Выборка по айди из бд стоит копейки, даже если юзеров будет миллион. Если какой-то запрос вернул ошибку инвалидации токена, то стираю все с локалсторадж и роутю на логин. Цена всего этого, что надо на каждый запрос лезть в бд и смотреть как там у юзера дела, немного ухудшает ситуацию то, что это spa приложение и для формирования страницы надо делать много запросов.
я б такого не стал делать, люди же jwt придумали, а тут вы такое городите что ужас

Bohdan
13.01.2018
08:10:33
jwt придумали для того что бы в БД ничего не хранить, а тут и jwt и БД пихают) Я фигею)))

Sasha
13.01.2018
14:09:07
jwt придумали для того что бы в БД ничего не хранить, а тут и jwt и БД пихают) Я фигею)))
Не только jwt, куча разных видов токенов с пэйлоадом. Вообще - это разный подход: stateless vs stateful.

Sasha
13.01.2018
14:13:09
а зачем их соединять)
Незачем, это изврат

Bohdan
13.01.2018
14:13:29
Незачем, это изврат
а выше человек соединил)))))))))))))

Sasha
13.01.2018
14:14:17
Да я вижу, бывает. Надеюсь, одумается

Igor
13.01.2018
14:19:28
Ну как бы это стандартный подход, когда нужно инвалидировать jwt

Google
Igor
13.01.2018
14:32:16
какой?
Хранить в базе

Либо хоть где-нибудь

Bohdan
13.01.2018
14:34:44
Так зачем тогда jwt использовать?

Sasha
13.01.2018
14:34:47
Хранить в базе
Не согласен. Допустим у тебя несколько приложений и SSO, протух токен - и даже если на странице нет никаких запросов, то всегда делается какой-то запрос к API для проверки. Это вроде и есть стандартная схема

Хранить состояние - это странно

Bohdan
13.01.2018
14:35:35
По хорошему, было бы неплохо куки для этого использоать тем более, там задать срок жизни можно же

Igor
13.01.2018
14:35:43
Так зачем тогда jwt использовать?
Это уже другой вопрос

Bohdan
13.01.2018
14:36:35
Это уже другой вопрос
та это основной вопрос))))) зачем декодируемый jwt, если его дополнительно в БД нужно хранить) Глупости неимоверные

Sasha
13.01.2018
14:37:23
Тут дело не в jwt. Есть конкретно стейтфул и стейтлесс. И уже в зависимости от задуманной архитектуры приложения решаем. Если мы хотим стейтлесс - то никаких состояний не храним, а в случае со страницами без запросов - просто кидаем на какой-нибудь чек эндпоинт

А можно и не делать, потому что так или иначе, любой экшен от пользователя потребует актуального токена. Так что, 401 он получит очень скоро

Igor
13.01.2018
14:39:26
Лень спорить, просто погуглите, как делается инвалидация jwt. Или вы предлагаете его вообще не юзать, если надо инвалидировать?

Хранить можно не все jwt, а именно протухшие, но у которых ещё время жизни не вышло

Sasha
13.01.2018
14:43:42
Инвалидация jwt на стороне клиента - это просто удалить его из локалсторейджа.

Хранение состояния в бд - совершенно другая система аутентификации.

Igor
13.01.2018
14:54:36
Инвалидация jwt на стороне клиента - это просто удалить его из локалсторейджа.
Юзер говорит, что у него украли токен, и вор сидит под ним пока срок жизни не истечет

Sasha
13.01.2018
15:32:48
Юзер говорит, что у него украли токен, и вор сидит под ним пока срок жизни не истечет
Access токены как правило имеют очень короткий период жизни, а рефреш токен мы все равно клиенту не отдаем

Более того, на самом SSO мы всегда можно удалить access токен текущий

Бекболот
13.01.2018
16:14:10
Всем привет

Google
Бекболот
13.01.2018
16:17:38
Могу ли я пишу здесь по английски?

I have a problem with project which developing with AngularJS

My problem with links which shared to social sites and messengers

Andrey
13.01.2018
16:21:22
Бекболот
13.01.2018
16:22:09
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

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

Andrey
13.01.2018
16:24:29
Бекболот
13.01.2018
16:27:48
Andrey
13.01.2018
16:29:54
Oh no problem bro. You can write Russian. I understand Russian but I can't write.. sorry...
тебе нужно использовать prerender, это nodejs решение которое позволяет тебе отрендерить страницу и отдать html содержимое. ты можешь все запросы с соц. сетей перехватывать с помощью веб-сервера nginx ( проверять заголовки ) и проксировать ( перенаправлять ) на nodejs сервер который будет запускать phantomjs ты можешь попробовать сервис prerender.io он легко интегрируется что бы соц. сеть понимала что показать с твоего сайта нужно сделать разметку на сайте с помощь opengraph, соц. сети на это ориентируются, еще есть schema.org как дополнительный вариант для google

Valera
13.01.2018
16:48:31
Ещё один вопросик Есть объект - var $routeResolve = {...}; И в каждом роуте он в качестве resolve: $routeProvider.when('/', { templateUrl: 'views/index.html', controller: 'IndexController', resolve: $routeResolve }); Можно ли как-то сразу для всех роутов это прописать или надо в каждый отдельно?

Andrey
13.01.2018
16:53:09
Ещё один вопросик Есть объект - var $routeResolve = {...}; И в каждом роуте он в качестве resolve: $routeProvider.when('/', { templateUrl: 'views/index.html', controller: 'IndexController', resolve: $routeResolve }); Можно ли как-то сразу для всех роутов это прописать или надо в каждый отдельно?
как вариант ты можешь сделать типа так: делаешь функцию, она будет принимать json объект который нужен для роута, только там всегда будет возвращаться твой роут уже с resolve

Valera
13.01.2018
16:55:32
Не совсем пониамаю.. А чего-то в стиле $routeProvider.defaultResolve = {...} нет?

Страница 211 из 325