当我让我的WinJS应用程序休眠一段时间然后再回到它,然后我点击一个按钮,由于某种原因,我对后端的调用都没有工作。
我得到一个"未经授权的"来自服务器的错误。
如何修改invokeApi以便重新验证用户或其他内容?
有没有人有使用mobileservices.web.js的经验以及如何让最终用户永久登录而无需重新认证自己?
三江源。
client.invokeApi("getTopForumsTotal", {
method: "post"
}).then(function (results) {
// do something
}, function (error) {
WinJS.log(error);
});
我使用winjs mobileService对用户进行身份验证。
client.login("microsoftaccount").done(function (results) {
// Create a credential for the returned user.
credential = new Windows.Security.Credentials.PasswordCredential("myapp", results.userId, results.mobileServiceAuthenticationToken);
vault.add(credential);
completeDispatcher();
}, function (error) {
WinJS.log(JSON.stringify(error));
errorDispatcher(error);
});
这就是我用来刷新最终用户令牌的方法。
client._request("GET", "/.auth/refresh", null, null, {
accept: "application/json",
"ZUMO-API-VERSION": "2.0.0"
}, [], (error, response) => {
if (!error) {
var userObject = JSON.parse(response.responseText)
if (userObject.authenticationToken) {
client.currentUser.mobileServiceAuthenticationToken = userObject.authenticationToken;
testCall().done(function (success) {
if (success) {
credential = new Windows.Security.Credentials.PasswordCredential("myapp", userObject.user.userId, userObject.authenticationToken);
vault.add(credential);
authenticated = true;
completeDispatcher();
}
else errorDispatcher('testCall API does not exist');
});
}
else errorDispatcher('no authentication token returned');
}
else errorDispatcher(error);
});
答案 0 :(得分:1)
我没有在每个API调用中包含一个promise,而是在客户端上合并了一个空闲例程,当用户令牌返回应用程序时刷新用户令牌,并且每隔59秒刷新一次令牌,这些令牌是空闲的。
因此,对于所有强烈和目的,他们将始终拥有有效的令牌或永久状态。
$(document).idle({
onIdle: function () {
// refresh user token
if (User.Person !== null)
User.Person.reauthenticate().done();
},
onActive: function () {
// when the user returns refresh their token 1 more time
if (User.Person !== null)
User.Person.reauthenticate().done();
},
idle: 59000, // 59 seconds
recurIdleCall: true // will keep refreshing every 59 seconds
});