gpt4 book ai didi

javascript - 确保用户使用 cookieStore 和 AngularJS 登录或注销的最佳实践

转载 作者:行者123 更新时间:2023-12-02 23:03:28 27 4
gpt4 key购买 nike

现在我正在 Ruby on Rails 之上构建一个基于 AngularJS 的应用程序,并使用 Devise 进行身份验证。当用户身份验证成功和身份验证失败时,我让服务器正确响应。我想我的问题是,使用 $cookieStore,了解用户是否登录的最佳实践是什么? Rails 设置了一个名为“myapp_session”的 cookie,但该 session 并不一定意味着用户已登录。寻找有关如何使用 AngularJS 保持用户在线/离线管理的想法。无论解决方案如何,我仍将确保需要授权的请求获得后端授权。

最佳答案

您可以创建一个指令,在应用程序加载时设置登录用户,例如,请求服务器上的当前用户 session 。

angular.module('Auth', [
'ngCookies'
])
.factory('Auth', ['$cookieStore', function ($cookieStore) {

var _user = {};

return {

user : _user,

set: function (_user) {
// you can retrive a user setted from another page, like login sucessful page.
existing_cookie_user = $cookieStore.get('current.user');
_user = _user || existing_cookie_user;
$cookieStore.put('current.user', _user);
},

remove: function () {
$cookieStore.remove('current.user', _user);
}
};
}])
;

并在 AppController 中的 run 方法中进行设置:

   .run(['Auth', 'UserRestService', function run(Auth, UserRestService) {

var _user = UserRestService.requestCurrentUser();
Auth.set(_user);
}])

当然,如果对服务器的任何请求返回 Http Status 401 - Unauthorized,您需要调用 Auth.remove() 服务从 cookie 中删除用户并将用户重定向到登录页面。

我使用这种方法并且效果很好。您也可以使用localStorage,但用户数据将保留很长时间。除非您为此身份验证设置到期日期,否则我认为这不是最佳实践。

请记住始终验证服务器站点上的用户凭据 =)

[编辑]

要监听 401 - Unauthorized 服务器响应,您可以在 $http 请求上放置拦截器,如下所示:

 .config(['$urlRouterProvider', '$routeProvider', '$locationProvider', '$httpProvider', function ($urlRouterProvider, $routeProvider, $locationProvider, $httpProvider) {
$urlRouterProvider.otherwise('/home');
var interceptor = ['$location', '$q', function ($location, $q) {

function success(response) {
return response;
}

function error(response) {

if (response.status === 401) {
$location.path('/login');
return $q.reject(response);
}
else {
return $q.reject(response);
}
}

return function (promise) {
return promise.then(success, error);
};
}];

$httpProvider.responseInterceptors.push(interceptor);
}])

每次调用 401 响应时,用户都会被重定向到 /login 路径的登录页面。

你会发现一个很好的例子here

关于javascript - 确保用户使用 cookieStore 和 AngularJS 登录或注销的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17982868/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com