2014-01-10 4 views
1

Я использую Angular для моего проекта и столкнулся с проблемой аутентификации. При успешной аутентификации пользователь извлекает токен с сервера, и как только пользователь имеет этот токен, он может получить доступ ко всем местам, где ему нужна аутентификация (я думал, что это лучший способ сделать это, поскольку я использую веб-API MVC в качестве бэкэнд, и у меня нет сеансы). Все работает нормально, пока я не закрою свой браузер и не запустил его. $ CookieStore и $ cookie пуст после перезагрузки.Сделать cookie преемником даже после выключения/перезапуска браузера с помощью Angular.js

Кто-нибудь есть идеи, как сделать cookie настойчивым, или есть ли более умный способ сделать это?

Ive создал тестовый контроллер с тестом, где у меня есть 2 кнопки, которые устанавливают и загружают $ cookie перед перезагрузкой, если я открываю новое окно, а другое еще работает, но как только я закрываю все вниз, кокетки пустые.

$scope.Set = function() { 

    $scope.LoadedData = "test"; 
    $cookies.myFavorite = 'oatmeal'; 

} 


$scope.Load = function() { 

    var b = $cookies.myFavorite; 
    console.log("testasdasd" + $cookies); 

    $scope.LoadedData = $cookies.myFavorite; 

} 

ответ

3

Существует 2 типа файлов cookie: cookie сеанса и постоянный файл cookie.

  • Сессия cookie хранится в памяти и сохраняется только до закрытия браузера.
  • Стойкие файлы cookie будут сохранены на диск и будут истекли на основе свойства Expires.

Решение сохранить файл cookie как сеанс или постоянный сервер, а не на стороне клиента javascript.

Когда вы используете аутентификацию .NET Forms, вы можете использовать FormsAuthentication.GetAuthCookie для создания файла cookie, второй параметр определяет, является ли это сеансом или постоянным файлом cookie.

+0

Могу ли я использовать FormsAuthentication, даже если я не использую проверку подлинности на основе форм? – Timsen

+0

@Timsen: В среде asp.net проверка подлинности на основе подлинности фактически является модулем, зарегистрированным в конвейере для перехвата запросов до того, как они достигнут ваших обработчиков. Я думаю, что это возможно, но вы должны реализовать его самостоятельно. Вы должны написать свой собственный модуль и зарегистрировать его с помощью фреймворка и самостоятельно перехватить запросы. –

+0

@ Timsen: Почему бы просто не включить его, указав конфигурацию в web.config? –

1

Я знаю, что на этот вопрос уже был дан ответ, но на самом деле вы МОЖЕТЕ управлять стороной сохранения cookie cookie. Просто $cookieStore.

Стойкие печенье:

// from your controller 
$cookieStore.put('auth_token', token); 
// in your module 
$http.defaults.headers.common.Authorization = $cookieStore.get('auth_token'); 

В модуле, мы говорим Угловое, что мы хотим использовать эту сессию каждый раз любую страницу нашего сайта, он загружен.

EDIT: Возможно, вас интересует HTML5 localstorage вместо печенья.

 Смежные вопросы

  • Нет связанных вопросов^_^