我正在寻找一个更好的方法解决我的问题。我在登录表单上记住了我的功能。如果用户单击“记住我”框,我的API会向我发送令牌。
我的问题是什么是存储此令牌并在用户返回我的网站时再次验证用户的最佳方式?
我的想法,
请给我任何可能对我有帮助的建议。
答案 0 :(得分:14)
使用ngCookies: ngCookies模块为读取和编写浏览器cookie提供了方便的包装。
首先,您可以使用bower bower install angular-cookies@X.Y.Z
或manully在应用中安装ngCookies。
然后在您的应用中注入ngCookies
angular.module('app', ['ngCookies']);
然后简单地使用
angular.module('App', ['ngCookies'])
.controller('demo', ['$cookies', function($cookies) {
// Setting a cookie
$cookies.put('cookieName', 'object');
// Retrieving a cookie
var sample= $cookies.get('cookieName');
// Remove a cookie
$cookies.remove('cookieName');
}]);
答案 1 :(得分:8)
我会将document.cookie与这样的工厂代码一起使用:
创建一个cookie(例如,这个cookie在一年后到期):
app.factory('$remember', function() {
return function(name, values) {
var cookie = name + '=';
cookie += values + ';';
var date = new Date();
date.setDate(date.getDate() + 365);
cookie += 'expires=' + date.toString() + ';';
document.cookie = cookie;
}
});
此工厂删除了Cookie:
app.factory('$forget', function() {
return function(name) {
var cookie = name + '=;';
cookie += 'expires=' + (new Date()).toString() + ';';
document.cookie = cookie;
}
});
然后,只要用户使用$ remember成功登录缓存密钥:
$remember('my_cookie_name', response.user._id);
在登录用户时始终检查cookie是否存在,否则使用标准登录并将其保存到cookie中。如果没有启用记住我,请忘记document.cookie
答案 2 :(得分:0)
如果您使用令牌身份验证/ Restful API,则首选方法是使用localStorage
。但是,除非用户选择“记住我”,否则使用此方法,他们将被要求再次登录他们打开的每个浏览器选项卡。因为使用sessionStorage
保存的每个项目仅适用于单个标签。
我创建了一个库来简化这一过程,并在所有打开的选项卡中同步会话数据。用户体验类似于cookie身份验证提供的体验。
有了这个,你可以这样做:
if (rememberMe)
storageManager.savePermanentData('data', 'key');
else
storageManager.saveSyncedSessionData('data', 'key');
您可以按var myData = storageManager.getData('key');