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

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

Т.А
12.01.2018
12:46:35
а как проверить?

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
есть у него стейт, он его в коснтрукторе присваивает, вопрос в том что у него этот компонент(директика) или че там, не инициализируется

Т.А
12.01.2018
12:48:49

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

Т.А
12.01.2018
12:52:56

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

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

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

Valera
12.01.2018
20:54:59

Andrey
12.01.2018
20:55:51

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 => {

Bohdan
12.01.2018
20:59:33

Valera
12.01.2018
21:00:47
всё равно баг выходит
если юзер авторизовался, в storage записались данные, что всё ок. Потом он пришел через день (естественно, уже срок авторизации истек), открыл сходу главную страницу (там нет никаких запросов). И будет отображаться кнопка Выход, вместо кнопки Вход

Andrey
12.01.2018
21:02:29


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 и БД пихают) Я фигею)))

Denis
13.01.2018
14:01:35

Sasha
13.01.2018
14:09:07

Bohdan
13.01.2018
14:12:48

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

Sasha
13.01.2018
14:31:52

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

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

Sasha
13.01.2018
15:32:48
Более того, на самом SSO мы всегда можно удалить access токен текущий

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

Igor
13.01.2018
16:15:14

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

Бекболот
13.01.2018
16:39:31


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

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

Andrey
13.01.2018
16:59:01