Аутентификация на основе токенов с Angular
Я хочу аутентифицировать пользователей через API, когда имя пользователя и пароль верны, он возвращает токен и сохраняет его в локальном хранилище с помощью ngStorage, но я прочитал некоторые статьи, которые не являются безопасными для сохранения токена в localStorage, и они ссылались на сохранение его в файлах cookie Http. Как я могу сохранить токен на куки Http и является ли он безопасным или есть лучший способ обработки аутентификации токена
$scope.loginUser = function(){
$http({
method: 'POST',
url: 'ourdomain.com/api/token',
headers:
{
'Content-type': 'application/x-www-form-urlencoded',
},
data:
'UserName=' + $scope.username +
'&Password=' + $scope.password
}).success(function(data, status) {
$localStorage.token = data;
console.log(data);
})
.error(function(data, status) {
console.log("Error");
});
}
2 ответа
Для куки пользователь может отключить куки.
эта ссылка может объяснить вам, как на основе токенов, так и на основе файлов cookie
https://auth0.com/blog/2014/01/07/angularjs-authentication-with-cookies-vs-token/
и это из-за разницы между localStorage, sessionStorage, сеансом и файлами cookie: в чем разница между localStorage, sessionStorage, сеансом и файлами cookie?
Я настоятельно рекомендую вам использовать stallizer: https://github.com/sahat/satellizer
Войти с помощью электронной почты и пароля
Клиент: введите свой адрес электронной почты и пароль в форму входа.
Клиент: В форме отправьте запрос $auth.login() с адресом электронной почты и паролем.
Клиент: Отправьте запрос POST в / auth / login. Сервер: Проверьте, существует ли электронная почта, если нет - верните 401.
Сервер: проверьте правильность пароля, если нет - верните 401.
Сервер: создайте веб-токен JSON и отправьте его клиенту.
Клиент: проанализируйте токен и сохраните его в локальном хранилище для последующего использования после перезагрузки страницы.
var user = {
email: $scope.email,
password: $scope.password
};
$auth.login(user)
.then(function(response) {
// Redirect user here after a successful log in.
})
.catch(function(response) {
// Handle errors here, such as displaying a notification
// for invalid email and/or password.
});
// Controller
$scope.isAuthenticated = function() {
return $auth.isAuthenticated();
};
<!-- Template -->
<ul ng-if="!isAuthenticated()">
<li><a href="/login">Login</a></li>
<li><a href="/signup">Sign up</a></li>
</ul>
<ul ng-if="isAuthenticated()">
<li><a href="/logout">Logout</a></li>
</ul>