我创建了基于令牌的授权。登录后,它将令牌存储在localStorage中,但我意识到localStorage是同步的,这不是我想要的单页应用程序。所以我看看Angular Local Forage,正如他们所说的那样是异步。
首先,我下载localForage和angularLocalForage并将其添加到索引
中<script src="public/scripts/angular/localforage.js"></script>
<script src="public/scripts/angular/angular-localForage.js"></script>
接下来,我在app.js中添加模块
'LocalForageModule'
在loginService成功调用时我添加了以下行:
$localForage.set('authorization', {
token: response.data.data.attributes.token,
nick: 'other values..if neccessary'
});
并在我的外部控制器中整理了整个页面,我添加了$localForage
get方法:
'use strict';
app.controller('ExternalCtrl', ['$scope', '$localForage',
function($scope, $localForage) {
$scope.authentication = {};
$scope.authentication = {
isAuth: false
};
var authData = $localForage.get('authorization');
if(authData) {
$scope.authentication.isAuth = true;
console.log($scope.authentication.isAuth);
}
}
]);
不幸的是,这不起作用,并且所有页面都没有显示,导致此错误:
TypeError:$ localForage.get不是函数 at new(ExternalCtrl.js:11) 在Object.invoke(
答案 0 :(得分:1)
正如您在documentation中看到的,获取值的方法是getItem()
,设置值的方法是setItem()
。
获取项目:
var authData = $localForage.getItem('authorization');
设置项目:
$localForage.set('authorization', {
token: response.data.data.attributes.token,
nick: 'other values..if neccessary'
});
答案 1 :(得分:1)
根据doc
使用localForage没有get()和set()方法,应该使用getItem()和setItem()并且它们是异步的,promise。
$localForage.setItem('authorization', {
token: response.data.data.attributes.token,
nick: 'other values..if neccessary'
}).then(function() {
//logged and stored data
});
和
function loadData() {
//here load data
}
$localForage.getItem('authorization').then(function(authData) {
//we got a stored authData
loadData();
}, function() {
// not logged
});