2017-03-07 15 views
0

クライアントフローメソッドを使用してユーザーのGoogle認証トークンをキャッシュするにはどうすればよいですか?CordovaとAzure Mobile Appsを使用して認証トークンをキャッシュする方法は?

以下のコードはユーザーの認証に成功しましたが、ユーザーがアプリを閉じて再オープンするたびに実行します。

loginAzure = function (loginSuccess, handleError) { 
    AzureDbSvc.client.login('google') 
    .then(function() { 
     // Obtain information about the authenticated use 
     var url = AzureDbSvc.client.applicationUrl + '/.auth/me'; 
     var headers = new Headers(); 
     headers.append('X-ZUMO-AUTH', 
      AzureDbSvc.client.currentUser.mobileServiceAuthenticationToken); 
     fetch(url, { headers: headers }) 
      .then(function (data) { 
       var user_json = data.json(); 
       console.log('user_json:' + user_json); 
       return user_json; 
      }).then(function (tuser) { 
       authUser.email = tuser[0].user_id; 
       for (i = 0; i < tuser[0].user_claims.length; i++) { 
        switch (tuser[0].user_claims[i].typ) { 
         case "name": 
          authUser.userName = tuser[0].user_claims[i].val; 
          break; 
         case "picture": 
          authUser.picture = tuser[0].user_claims[i].val; 
          break; 
         case "locale": 
          authUser.locale = tuser[0].user_claims[i].val; 
          break; 
        } 
       } 

       loginSuccess(authUser); 
      } 
     ); 
    }, handleError); 
} 

ご協力いただきまして誠にありがとうございます。

マイク

答えて

0

ショートバージョン:

  1. のlocalStorage
  2. に保管client.currentUserのJSON表現
  3. アプリを起動すると、一時変数にclient.currentUserを復元します。 mobileServiceAuthenticationTokenの値が期限切れであるかどうかテストしてください。存在する場合は、手順3を破棄してスキップします。
  4. 一時変数をclient.currentUserに割り当てます。
  5. client.currentUserに有効なトークンがない場合は、client.login( 'google')を呼び出してstore in localstorage(ステップ1を読むには)

これは、/.auth/meの出力でも同じことを行うことができます。トークンが変更されたときには、/auth/meを読む必要があります。

+0

mobileServiceAuthenticationTokenの値が期限切れであることを確認するにはどうすればよいですか?私は検索しましたが、簡単な解決策は見つかりませんでした。 – Mike

+0

これはJWTです - 任意のjwtライブラリを使用してください - 例についてはhttp://jwt.ioを参照してください。 –

関連する問題