Я использую угловой ресурс $ для доступа к API. В этом конкретном случае с пользовательским действием для входа в систему для входа в систему пользователя.
Чтобы сохранить токен, предоставленный API после аутентификации, я подключаю перехватчик к пользовательскому действию входа, который просто сохраняет токен в cookie через $ cookies.
Я использую перехватчик, так как мне нужно будет сохранить и обновить этот файл cookie из других частей приложения.
Проблема в том, что файл cookie, похоже, не сохраняется.
Если я проверю значение сразу после сохранения, я могу подтвердить его наличие, но как только изменится моя позиция (например, при рендеринге домашней страницы после входа в систему), файл cookie исчезнет.
Любые идеи?
Спасибо, D.
Вот мой Логин Сервис, который использует действие пользовательского входа и перехватчик
(function() {
'use strict';
//Login Service
// Authenticates a user
angular
.module('console')
.factory('LoginService', LoginService);
LoginService.$inject = ['$resource', 'Config', 'UserInfoInterceptor'];
function LoginService($resource, Config, UserInfoInterceptor) {
return $resource(Config.api_url + '/auth/', {},
{
login: {
method: 'POST',
url: Config.api_url + '/auth/login',
data: {type: "passwd"},
interceptor: UserInfoInterceptor,
headers: {
"accept": "application/json",
"content-Type": "application/json;odata=verbose"
}
}
});
}
})();
А вот перехватчик (Это console.log там, на самом деле пишет печенье значение), но он теряется сразу после перехода в другое место.
(function() {
'use strict';
angular
.module('console')
.factory('UserInfoInterceptor', UserInfoInterceptor);
UserInfoInterceptor.$inject = ['$resource', 'Config', '$q', '$location', '$cookies'];
function UserInfoInterceptor($resource, Config, $q, $location, $cookies) {
return {
// Save the received token
'response': function (response) {
var now = new Date();
// this will set the expiration to 30 days
var exp = new Date(now.getFullYear(), now.getMonth()+1, now.getDate());
// Set the cookie
$cookies.put('token', response.data.token, {expires: exp});
//This actually works!!
console.log($cookies.get('token'));
return response;
},
// Whatever is the failure, throw the user to the login page
'responseError': function (response) {
if (response.status === 401 || response.status === 403) {
$location.path('/login');
}
return $q.reject(response);
}
};
}
это никогда не слишком поздно – AlainIb