MobileServices.web.js 未授权 api 调用
MobileServices.web.js unauthorized api call
当我让我的 WinJS 应用程序休眠一段时间然后再回到它时,我点击了一个按钮,出于某种原因我对后端的调用无法正常工作。
我从服务器收到 "Unauthorized" 错误。
如何修改 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);
});
我没有在每次 API 调用时都包装一个 promise,而是在客户端上加入了一个空闲例程,当用户 return 访问应用程序时刷新用户令牌,并且每 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
});
当我让我的 WinJS 应用程序休眠一段时间然后再回到它时,我点击了一个按钮,出于某种原因我对后端的调用无法正常工作。
我从服务器收到 "Unauthorized" 错误。
如何修改 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);
});
我没有在每次 API 调用时都包装一个 promise,而是在客户端上加入了一个空闲例程,当用户 return 访问应用程序时刷新用户令牌,并且每 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
});