Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 记住Angularjs中的功能和令牌_Javascript_Angularjs_Cookies - Fatal编程技术网

Javascript 记住Angularjs中的功能和令牌

Javascript 记住Angularjs中的功能和令牌,javascript,angularjs,cookies,Javascript,Angularjs,Cookies,我正在寻找更好的方法来解决我的问题。我的登录表单上有“记住我”功能。当用户单击“记住我”框时,我的API将向我发送令牌 我的问题是,当用户返回我的站点时,存储此令牌并再次验证用户身份的最佳方式是什么 我想 创建一个Cookie并将令牌存储在那里 创建本地存储 请给我任何可能对我有帮助的建议。我会使用document.cookie,出厂代码如下: 创建cookie(例如,此cookie将在一年内过期): 此工厂将删除cookie: app.factory('$forget', function()

我正在寻找更好的方法来解决我的问题。我的登录表单上有“记住我”功能。当用户单击“记住我”框时,我的API将向我发送令牌

我的问题是,当用户返回我的站点时,存储此令牌并再次验证用户身份的最佳方式是什么

我想

  • 创建一个Cookie并将令牌存储在那里
  • 创建本地存储
    请给我任何可能对我有帮助的建议。

    我会使用document.cookie,出厂代码如下:

    创建cookie(例如,此cookie将在一年内过期):

    此工厂将删除cookie:

    app.factory('$forget', function() {
        return function(name) {
            var cookie = name + '=;';
            cookie += 'expires=' + (new Date()).toString() + ';';
    
            document.cookie = cookie;
        }
    });
    
    然后,每当用户使用$MEMORE成功登录缓存密钥时:

    $remember('my_cookie_name', response.user._id);
    

    并且在登录用户时始终检查cookie是否存在,否则请使用标准登录并将其保存到cookie中。如果未启用“记住我”,请忘记文档。cookie使用ngCookies: ngCookies模块为读取和写入浏览器cookies提供了方便的包装

    首先,使用bower
    bower安装程序在应用程序中安装ngCookies-cookies@X.Y.Z
    或手动

    然后在你的应用程序中注入
    ngCookies
    ,就像
    angular.module('app',['ngCookies')

    然后简单地使用like

    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');
          }]);
    

    如果您使用的是令牌身份验证/Restful API,那么首选的方法是使用
    localStorage
    。然而,使用这种方法,除非用户选择“记住我”,否则他们需要再次登录到他们打开的每个浏览器选项卡。因为使用
    sessionStorage
    保存的每个项目仅对单个选项卡可用。 我创建了一个库来简化这个过程,并跨所有打开的选项卡同步会话数据。用户体验类似于cookie身份验证提供的体验。 通过此操作,您可以执行以下操作:

    if (rememberMe)
        storageManager.savePermanentData('data', 'key');
    else
        storageManager.saveSyncedSessionData('data', 'key');
    
    您可以通过
    var myData=storageManager.getData('key')检索数据

    您可以从以下链接下载此库:

    (函数(角度){
    "严格使用",;
    angular.module('app',['ngCookies']))
    .controller('mainController',['$cookies','$timeout',函数($cookies,$timeout){
    var vm=这个;
    vm.message='';
    vm.getCookies=getCookies;
    vm.setCookies=setCookies;
    vm.clearCookies=clearCookies;
    getCookies();
    函数getCookies()
    {
    vm.var1=$cookies.get('var1');
    vm.var2=$cookies.get('var2');
    }
    函数setCookies()
    {
    $cookies.put('var1',vm.var1);
    $cookies.put('var2',vm.var2);
    if(vm.var1&&vm.var2)
    showMessage('Cookies设置成功!');
    其他的
    showMessage('请输入一些值');
    }
    函数clearCookies()
    {
    $cookies.remove('var1');
    $cookies.remove('var2');
    getCookies();
    showMessage('Cookies已成功清除!');
    }
    函数showMessage(msg)
    {
    vm.message=msg;
    $timeout(函数(){
    vm.message='';
    }, 2000);
    }
    }]);
    })(窗口角度)
    
    正文
    {
    填充:10px;
    }
    
    样品
    输入一些值,按“设置cookies”,然后刷新页面。(右上角的刷新按钮)
    
    VAR1的Cookies VAR1的Cookies 清楚的 设置cookies {{ctrl.message}
    回答很好:)我会尽力让你知道。你能解释一下如何检查我的cookie是否设置好吗?目前我使用的是布尔标志,但不起作用。有什么想法吗?cookie即使过期也不会从浏览器中删除。@willjlong我们如何检查cookie?然后根据cookie应用条件。你能进一步解释一下吗?这应该作为一个公认的答案,因为在代码中使用DOM对象不是一个好的实践。
    if (rememberMe)
        storageManager.savePermanentData('data', 'key');
    else
        storageManager.saveSyncedSessionData('data', 'key');