请记住我在Angularjs中的功能和令牌

Gee*_*ets 11 javascript cookies angularjs

我正在寻找一个更好的方法解决我的问题.我在登录表单上记住了我的功能.用户点击"记住我"框,我的API发送给我令牌.

我的问题是,当他们回到我的网站时,存储此令牌并再次验证用户的最佳方法是什么?

我的想法,

  1. 在那里创建一个Cookie并存储令牌.
  2. 创建本地存储.

请给我任何可能对我有帮助的建议.

Uma*_*med 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');
      }]);
Run Code Online (Sandbox Code Playgroud)

  • 这应该被用作可接受的答案,因为在角度代码中使用DOM对象不是一个好习惯. (3认同)

wil*_*ong 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;
    }
});
Run Code Online (Sandbox Code Playgroud)

这个工厂删除了cookie:

app.factory('$forget', function() {
    return function(name) {
        var cookie = name + '=;';
        cookie += 'expires=' + (new Date()).toString() + ';';

        document.cookie = cookie;
    }
});
Run Code Online (Sandbox Code Playgroud)

然后,只要用户使用$ remember成功登录缓存密钥:

$remember('my_cookie_name', response.user._id);
Run Code Online (Sandbox Code Playgroud)

并且在登录用户时始终检查cookie是否存在,否则使用标准登录并将其保存到cookie中.如果没有启用记住我,请忘记document.cookie