遵循文档身份验证中的各种示例使用zure的azure移动客户端服务工作正常。我无法持久保存返回的身份验证令牌,以便可以使用它来查看用户是否仍在下次请求时登录。
从登录所有正常工作的初始请求开始:
client.login("facebook").then(function (results) {
console.log(results);
localStorageService.add('currentUser', client.currentUser);
}, function (error) {
console.log(error);
});
这将在结果和client.currentUser中返回一个如下所示的对象:
{
mobileServiceAuthenticationToken: "IHAVETRUNCATEDIT",
userId: "Facebook:1210971539"
}
我将此对象存储到localstorage(或cookie)中,以便下次需要登录时我可以检查此令牌是否存在并将其传递回login客户端服务(请参阅令牌部分)。根据各种pages,这种格式至少对于facebook提供者应该采用以下形式:
{"access_token": "THEACCESSTOKEN"}
因此,这是在第二次(持续)时间调用登录时提交的内容。传入的令牌与我们放置在localstorage中的令牌相同。
var currentUser = localStorageService.get('currentUser');
client.login("facebook",
{ "access_token": currentUser.mobileServiceAuthenticationToken })
.then(function (results) {
console.log(results);
}, function (error) {
console.log(error);
});
返回的错误是:
Error: The Facebook Graph API access token authorization request failed with HTTP status code 400
我不太关注后续请求(第二天)如何检查用户的令牌是否仍然良好。
答案 0 :(得分:1)
似乎这样做的方法如下:
client.currentUser = {
userId: currentUser.userId,
mobileServiceAuthenticationToken: currentUser.mobileServiceAuthenticationToken
};
无需再次登录,只需使用保存的凭据设置currentUser即可。
以下我用作reference的博文。
答案 1 :(得分:0)
至少对于Facebook,从成功的MobileServiceClient.login()请求返回的访问令牌对于与Facebook API的进一步通信无效。似乎这是因为FB Graph API在2014年3月完成了对版本2.2的更改。你可以做的是用FB进行手动登录,而不是使用MobileServiceClient.login(),然后像你一样将获得的用户名和JWT设置为MobileServiceClient:
client.currentUser = {
userId: "Facebook:xxx",
mobileServiceAuthenticationToken: "<your-users-JWT>"
};