Я новичок в AngularJS, прошел их руководство и почувствовал его.
У меня есть готовый бэкэнд для моего проекта, где каждая REST
конечная точка должна быть аутентифицирована.
Что я хочу сделать
а.) Я хочу иметь одну страницу для моего проекта http://myproject.com
.
б.) Как только пользователь попадает по URL-адресу в браузере, в зависимости от того, вошел ли пользователь в систему или нет, ему предоставляется домашняя страница / представление или страница входа / представление под тем же URL-адресом http://myproject.com
.
c.) если пользователь не вошел в систему, он заполняет форму, и сервер устанавливает USER_TOKEN
сеанс, поэтому все дальнейшие запросы к конечным точкам будут аутентифицированы на основеUSER_TOKEN
Мои затруднения
а. Как я могу обрабатывать аутентификацию на стороне клиента с помощью AngularJS? Я видел здесь и здесь, но не понимал, как их использовать
б.) Как я могу представить пользователю разные представления в зависимости от того, вошел ли пользователь в систему или нет по тому же URL-адресуhttp://myproject.com
Я впервые использую angular.js и действительно не понимаю, с чего начать. Мы очень ценим любые советы и / или ресурсы.
источник
Ответы:
Я создал репозиторий на github, в основном резюмирующий эту статью: https://medium.com/opinionated-angularjs/techniques-for-authentication-in-angularjs-applications-7bbf0346acec
ng-login Репозиторий Github
Plunker
Я постараюсь объяснить как можно лучше, надеюсь, что помогу некоторым из вас:
(1) app.js: создание констант аутентификации в определении приложения.
(2) Служба аутентификации : все следующие функции реализованы в службе auth.js. Служба $ http используется для связи с сервером для процедур аутентификации. Также содержит функции по авторизации, то есть если пользователю разрешено совершать определенное действие.
(3) Сессия: синглтон для хранения пользовательских данных. Реализация здесь зависит от вас.
(4) Родительский контроллер: считайте это «основной» функцией вашего приложения, все контроллеры наследуются от этого контроллера, и это основа аутентификации этого приложения.
(5) Контроль доступа: чтобы запретить доступ на определенных маршрутах, необходимо выполнить 2 шага:
a) Добавьте данные о ролях, которым разрешен доступ к каждому маршруту, в сервисе $ stateProvider ui router, как показано ниже (то же самое может работать и для ngRoute).
б) В $ rootScope. $ on ('$ stateChangeStart') добавьте функцию для предотвращения изменения состояния, если пользователь не авторизован.
(6) Перехватчик аутентификации: это реализовано, но не может быть проверено в рамках этого кода. После каждого запроса $ http этот перехватчик проверяет код состояния, если возвращается одно из следующих, то он транслирует событие, чтобы заставить пользователя снова войти в систему.
PS Ошибку с автозаполнением данных формы, о которой говорилось в 1-й статье, можно легко избежать, добавив директиву, которая включена в directives.js.
PS2 Этот код может быть легко изменен пользователем, чтобы разрешить просмотр различных маршрутов или отображение содержимого, которое не предназначалось для отображения. Логика ДОЛЖНА быть реализована на стороне сервера, это просто способ правильно показать вещи в вашем ng-приложении.
источник
authService.login() = [...]
эти квадратные скобки будут означать что-то вроде$http.get(url, {uID, pwd}
? ~~ хорошо, заглянул в плункер, это было, как я сказал XDМне нравится этот подход, и я реализовал его на стороне сервера, не выполняя никаких действий, связанных с аутентификацией, на интерфейсе.
Ищите комментарий «Эндрю Джослин».
https://groups.google.com/forum/?fromgroups=#!searchin/angular/authentication/angular/POXLTi_JUgg/VwStpoWCPUQJ
источник
Я ответил на аналогичный вопрос здесь: AngularJS Authentication + RESTful API
Я написал модуль AngularJS для UserApp, который поддерживает защищенные / общедоступные маршруты, перенаправление при входе / выходе, пульс для проверки статуса, сохраняет токен сеанса в файле cookie, событиях и т. Д.
Вы могли либо:
https://github.com/userapp-io/userapp-angular
Если вы используете UserApp, вам не придется писать какой-либо серверный код для пользовательского материала (больше, чем проверка токена). Пройдите курс по Codecademy чтобы попробовать.
Вот несколько примеров того, как это работает:
Как указать, какие маршруты должны быть общедоступными и какой маршрут является формой входа в систему:
.otherwise()
Маршрут должен быть установлен в положение, где вы хотите , чтобы ваши пользователи будут перенаправлены после входа в систему . Пример:$routeProvider.otherwise({redirectTo: '/home'});
Форма входа с обработкой ошибок:
Форма регистрации с обработкой ошибок:
Ссылка для выхода:
<a href="#" ua-logout>Log Out</a>
(Завершает сеанс и перенаправляет на маршрут входа)
Доступ к свойствам пользователя:
Доступ к свойствам пользователя осуществляется с помощью
user
службы, например:user.current.email
Или в шаблоне:
<span>{{ user.email }}</span>
Скрыть элементы, которые должны быть видны только при входе в систему:
<div ng-show="user.authorized">Welcome {{ user.first_name }}!</div>
Показать элемент на основе разрешений:
<div ua-has-permission="admin">You are an admin</div>
А для аутентификации в серверных службах просто используйте,
user.token()
чтобы получить токен сеанса и отправить его с запросом AJAX. На бэкэнде используйте UserApp API (если вы используете UserApp), чтобы проверить, действителен ли токен.Если вам понадобится помощь, просто дайте мне знать!
источник
В angularjs вы можете создать часть пользовательского интерфейса, службу, директивы и все части angularjs, которые представляют пользовательский интерфейс. Это хорошая технология, над которой можно работать.
Как и любой, кто впервые знаком с этой технологией и хочет аутентифицировать «пользователя», я предлагаю сделать это с помощью веб-API C #. для этого вы можете использовать спецификацию OAuth, которая поможет вам создать надежный механизм безопасности для аутентификации пользователя. как только вы создадите WebApi с помощью OAuth, вам нужно будет вызвать этот api для токена:
и как только вы получите токен, вы запрашиваете ресурсы у angularjs с помощью токена и получаете доступ к ресурсу, который защищен в веб-Api со спецификацией OAuth.
Пожалуйста, загляните в следующую статью для получения дополнительной помощи: -
http://bitoftech.net/2014/06/09/angularjs-token-authentication-using-asp-net-web-api-2-owin-asp-net-identity/
источник
А что будет, если пользователь поймает JSON и изменит значение bool на True?
Я думаю, вам никогда не следует полагаться на клиентскую сторону, чтобы делать подобные вещи. Если пользователь не аутентифицирован, сервер должен просто перенаправить на страницу входа / ошибки.
источник
источник