为未来请求缓存Azure移动服务令牌 - Facebook和错误400

时间:2013-12-03 20:36:51

标签: azure azure-mobile-services

遵循文档身份验证中的各种示例使用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

我不太关注后续请求(第二天)如何检查用户的令牌是否仍然良好。

2 个答案:

答案 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>"
};