2016-12-24 2 views
0

Lorsque je laisse mon application WinJS inactive pendant un certain temps, puis que je la rallume et que je clique sur un bouton, pour une raison ou une autre, mes appels à mon serveur ne fonctionnent pas.MobileServices.web.js api call

Je reçois une erreur "non autorisée" du serveur. Comment puis-je modifier le invokeApi afin qu'il réauthentifie l'utilisateur ou quelque chose?

Quelqu'un a-t-il déjà utilisé le service mobileservices.web.js et comment garder l'utilisateur final connecté sans avoir à se réauthentifier?

Merci.

client.invokeApi("getTopForumsTotal", { 
    method: "post" 
}).then(function (results) { 
    // do something 
}, function (error) { 
    WinJS.log(error); 
}); 

J'utilise winjs mobileService pour authentifier l'utilisateur.

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); 
}); 

et c'est ce que j'utilise pour actualiser le jeton des utilisateurs finaux.

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

Utilisez-vous WinJS pour créer l'application Windows Phone/Windows? Comment authentifiez-vous votre application mobile? S'il vous plaît donner plus d'informations pour nous aider à mieux comprendre votre problème. –

+0

J'ai mis à jour ma réponse. Le problème que je rencontre est quand appeler la routine de jeton d'actualisation. Les points où il échoue est lors de la création d'appels API sur le serveur à l'aide de l'objet client. par exemple. client.invokeApi, appels de table ou appels client._request. Ces appels échouent si le jeton d'authentification expire, de sorte que l'actualisation doit être appelée avant cela. Comment puis-je le configurer de sorte que je puisse actualiser le jeton si la machine des utilisateurs a été inactive et qu'ils reviennent? –

+0

A propos de l'utilisation des jetons d'actualisation Je vous recommande de consulter [cet article de blog] (https://shellmonger.com/2016/04/13/30-days-of-zumo-v2-azure-mobile-apps-day -7-refresh-jetons /). –

Répondre

1

Au lieu d'envelopper une promesse autour de chaque appel API Je viens incorporer une routine d'inactivité sur le client qui rafraîchit le jeton d'utilisateur lors de leur retour à l'application ainsi que rafraîchit le jeton toutes les 59 secondes qu'ils sont au repos. Donc, pour tous les objectifs intenses, ils auront toujours un jeton valide ou un état perpétuel.

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

https://github.com/kidh0/jquery.idle