Sergey
Что вы там храните и как она эволюционирует в процессе
Igor
Ок, спасибо
Stas
Всем привет, ребят, подкиньте идею. Если у юзера истёк срок токена, его нужно обновить, разлогинить, сообщить ему что перезашел, просто запретить доступ?
Sergey
Всем привет, ребят, подкиньте идею. Если у юзера истёк срок токена, его нужно обновить, разлогинить, сообщить ему что перезашел, просто запретить доступ?
Зависит. Если токен минуты живёт то лучше как-то на фоне обновить, через приостановку запросов после первого 401. А если например сутки, то и логин показать можно
Stas
Ну я думаю на недельку поставить
Sergey
Тогда нет проблем наверное и логин показать
Stas
Понял, спс
Sergey
Но неделя это очень много, смысл токенов пропадает же
Sergey
Хотя это в принципе всё условно. Я не особо понимаю вектор атаки от которой спасает рефреш токен при обычной авторизации с логином паролем
Sergey
https://m.habr.com/company/voximplant/blog/323160
Sergey
Там если комменты почитать, то видно что не один я такой
Stas
Ок, посмотрю, спасибо
Sergey
Я посмотрел и расстроился. Только я подумал что наконец-то понял как оно работает, буквально на днях дотнекст по теме смотрел. И оказывается нет, нихрена, жизнь боль!
Stas
А если токен не просрочен, его лучше обновлять?
Sergey
https://auth0.com/docs/api-auth/tutorials/silent-authentication
Sergey
Вот там они отвечают на вопрос «как»
Sergey
Но не «когда»
Sergey
Я в интерцепторе ловлю 401 и на первом запускаю рефреш запрос. И пока он бежит собираю поступающие запросы в массив промисов, который пуляю если удалось обновить с новым токеном
Sergey
Если по таймеру рефрешить, я так понял ты это хочешь, то могут быть запросы которые обломятся пока токен обновлялся
Sergey
И юзера от этого может на логин выкинуть
Sergey
А мы это не хотим
Sergey
Проблема только в том что у меня это говно глючит ибо слишком много логики
Sergey
Но это вопрос извлечения рук из жопы скорее
Sergey
самый верный флоу на мой взгляд
Способ работает, но нужно предусмотреть и как следует проверить обработку ошибок рефреша.
Sergey
А то у меня получился циклический рефреш, было стыдно)
Rem1te
А то у меня получился циклический рефреш, было стыдно)
нормально, че. дрочить сервер пока не вернет токен :))
Igor
кто подскажет норм tutorial типа этого https://medium.com/@levifuller/building-an-angular-application-with-asp-net-core-in-visual-studio-2017-visualized-f4b163830eaa только с javaScript или просто подобный, может с другой стороны если подойти, будет понятнее
Данияр
Кто может подсказать, есть ли библиотека для реализации авторизации посредством 4-значного пин кода ?
Rem1te
Кто может подсказать, есть ли библиотека для реализации авторизации посредством 4-значного пин кода ?
а какую часть такой авторизации должна быть в либе? Сгенерировал код, отправил юзеру на мобилу, подтвердил ввод через апишку, тадам
Rem1te
реализуйте сами
Данияр
Мм ок
wrodzko
Ребята, подскажите, правильно ли поступаю, когда разделяю config, controller, template, service по разным файлам? Дело в том, что использую $stateProvider и выходит, что в конфиге есть логика загрузки данных в resolve. Хотелось бы вынести это в контроллер, типа NameCtrl.resolve = {}; а потом в конфиге resolve: NameCtrl.resolve. Но контроллер находится в другом файле и доступ из конфига я к нему не имею. Попробовал прокинуть посредствам DI, но вылетает ошибка: "Unknown provider". Помогите, пожалуйста, разобраться, что я делаю не так.
Sergey
А зачем вы вообще так делаете? У ui-router есть resolve, он в контроллер инжектит
Sergey
Или у вас дефолтный роутер?
wrodzko
Да, инжектит. Но из контроллера не понятно, как получаются заинжекченные данные. К примеру, в контроллер приходит что-то типа 'users'. Что это за юзеры? Откуда они берутся? Из контроллера я не могу узнать эту информацию. Приходится идти в конфиг и там будет resolve: { users: userService => userService.getUsers(); }
Sergey
А зачем контроллеру знать откуда юзеры? У вас di чтобы как раз не знать
wrodzko
Было бы клево видеть такие вызовы внутри контроллера. И тогда, легко можно было бы понимать, что это за юрезы инжектятся
wrodzko
Ну, самому контроллеру пофигу. Он как получал юзеров, так и будет получать их через DI. Тут дело просто удобочитаемости.
Sergey
Ну инжектите сервис тогда)
Sergey
Тогда все вызовы на виду будут
wrodzko
Насколько я понимаю, суть resolve в том, чтобы не переходить по роуту до тех пор, пока не будут готовы все данные. А, если инжектить напрямую сервис в контроллер, тогда я потеряю эту самую фишку)
wrodzko
И будут на странице мерцания, когда темплейт отрисуется пустым, а затем подгрузит данные и отобразит
Sergey
Ну вы сами сложности ищете, а потом удивляетесь)
Sergey
Я пока так и не понял как это должно выглядеть, что должно быть в контроллере? Промис из сервиса? Либо ваши данные сами должны и содержать список и методы для работы с ним
Sergey
Или инжектить данные и методы работы с ними отдельно
wrodzko
$stateProvider.state('state', { resolve: MainCtrl.resolve } ------------ function MainCtrl (users) { this.users = users; } // create the resolved property MainCtrl.resolve = { users: function (UserService) { return UserService.getUsers(); } };
wrodzko
Что-то вроде этого мне бы хотелось реализовать.
Sergey
Ну я примерно так и делаю, в маршрутизаторе умный компонент, который потребляет сервисы, а он уже пробрасывает биндинги тупым компонентам которые могут только отображать и дергать колбэки
Sergey
То есть тупой компонент вообще без понятия откуда данные и что с ними происходит, всё через биндинги
Sergey
{ name: "app.users.add", url: "/add", template: [ "<users-list", "users='$ctrl.users'", "on-user-add='$ctrl.addUser(user)'", "on-user-remove='$ctrl.removeUser(userId)' "on-user-update='$ctrl.updateUser(user)', "></users-list>" ].join(" "), controller: [ "users", "usersService", function ( users: User[], usersService: UsersService): void { this.users = users; this.usersService = usersService; this.addUser = (user:User) = { ...... } ...... }], controllerAs: "$ctrl", resolve: { users: [ "usersService", (usersService: UsersService): Promise<User[]> => { return usersService.getUsers(); }], }, ncyBreadcrumb: { label: "Users" } },
Sergey
Вот что-то в таком духе
Sergey
Контроллер инлайновый или нет - по вкусу
Sergey
Это не то?)
Igor
Что вы там храните и как она эволюционирует в процессе
У меня тут есть догадка, подскажите правильно ли я думаю. Смотрю видео урок от ITVDN рассказ про наследование контроллеров. и как я понял что если в головном контроллере определить поле ссылочного типа, то оно будет обновляться независимо от того в какой из дочерних деректив его меняли. и получается мне надо объявить такое поле на основной странице и использовать его в двух моих дочерних директивах?
Igor
это для того чтоб при добавлении записи о социальной сети, в другой дерективе появлялась иконка
Igor
или как то использовать переменную $rootScope
Sergey
Вам нужен или store или порождать событие
Sergey
@jashka_jashka показывал как-то свою библиотеку для организации сторов в нг1
Sergey
Может быть вам это подойдёт
pa[aad
https://github.com/Insidexa/jstore вот оно используется rxjs, правда скорее оно не подойдет ибо порог входа возростает с rxjs
Sergey
Я просто не понимаю где там возникает затык))
Sergey
@IgPod вы может в песочнице типа plunkr продемонстрируете проблему?
Sergey
Наследование контроллеров звучит как очень старые туториалы с толстыми контроллерами
Sergey
Но может быть у вас там так и надо, не знаю
Igor
не сейчас не покажу, но я нашел для себя такую штуку $rootScope.$broadcast("e_Event_changeProfileSocials", editSocial.model); - это в одной директиве при редактировании соц сетей $scope.$on("e_Event_changeProfileSocials", function (event, socials) { viewHrProfile.profile.FacebookURL = socials.FacebookURL; viewHrProfile.profile.LinkedinURL = socials.LinkedinURL; viewHrProfile.profile.TwitterURL = socials.TwitterURL; viewHrProfile.profile.GooglePlusURL = socials.GooglePlusURL; viewHrProfile.profile.InstagramURL = socials.InstagramURL; }); - это в другой директиве, где отображаются иконки. проверить сейчас не могу, тим лид на выходные доступ перекрывает
Sergey
Ну это если директивы вообще никак не связаны
Igor
у нас тут просто в одном месте так и сделано, так что думаю взлетит)
Sergey
Окей)
Igor
завтра скажу результат
Sergey
Да будет всё работать. Тут вопрос архитектуры. Если у вас так принято, то почему нет.
Igor
дрйгой вопрос, если у меня на форме стоит ng-if="viewHrProfile.profile.FacebookURL" он подхватит изменения в модели? или надо ng-if*="viewHrProfile.profile.FacebookURL" или ng-if={{viewHrProfile.profile.FacebookURL}}
Igor
в примере что у нас в проекте есть изменение через event но там переменная на html лежит как {{viewHrProfile.profile.Status}}
Sergey
Первый вариант будет работать
Sergey
Если в области видимости такое есть и оно обновится соответствующим образом
Igor
pa[aad
шо за нашествие ботов
Oleg