2017-08-10 87 views
0

我创建了基于令牌的授权。登录后,它将令牌存储在localStorage中,但我意识到localStorage是同步的,这不是我想要的单页面应用程序。所以我看着Angular Local Forage,他们说这是异步的。设置AngularLocalForage成功登录电话

首先我下载localForage和angularLocalForage和指数增加它

<script src="public/scripts/angular/localforage.js"></script> 
<script src="public/scripts/angular/angular-localForage.js"></script> 

接下来,我加入app.js模块

'LocalForageModule' 

在login服务的成功调用我添加以下行:

$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 is not a function at new (ExternalCtrl.js:11) at Object.invoke (

回答

1

Acording的doc

有没有get()和set()方法localForage,应该使用使用的getItem( )和setItem(),它们是异步的,承诺。

$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 
}); 
+0

您的解决方案是工作,但我仍然需要登录后刷新页面,logouting看到的变化,为什么后? – BT101

+0

只有在登录服务存储了数据后,您才需要重定向到记录的页面 – Fetrarij

+0

但是在我的主页上,我为记录的人员提供了不同的东西,并且没有根据'$ scope.authentication.isAuth = true;'进行登录,并且当我通过有效的登录名和密码我仍然需要刷新页面才能看到登录用户的内容,我该如何更改它? – BT101

1

正如你可以在documentation看到,该方法获取值为getItem(),设置值的方法为setItem()

获取项:

​​

设置项:

$localForage.set('authorization', { 
    token: response.data.data.attributes.token, 
    nick: 'other values..if neccessary' 
});