2016-02-29 81 views
0

我在混合應用程序中使用AzureMobileServices自定義API。 customAPI名稱可以說'userUtils'。 登錄和身份驗證部分工作良好,我可以使用臉書/谷歌oAuth驗證用戶。 登錄完成後,我調用一個customAPI函數 - insert(一個http POST) - 基本上將用戶添加到docDB中(如果尚未添加)。並返回用戶的詳細信息到我的客戶端。 (我已'POST'權限設置爲'具有應用程序密鑰的用戶'此自定義API(順便說一下,這是權限設置權還是應該'只有通過身份驗證的用戶'))。保留Azure移動服務的自定義API調用的用戶身份驗證

 //below code is part of a typescript file 
     this._zumoClient = new WindowsAzure.MobileServiceClient("https://abcdefExample.azure-mobile.net/", "someExampleApplicationKey"); 
     ... 
     ....  

     ....  
     public authenicateUser(p_oAuthProvider: string) { 
      var p: Promise<any> = new Promise(
       (resolve: (result: any) => void, reject: (err: any) => void) => 
        this._zumoClient.login(p_oAuthProvider, null).done(
         (loginResult) => { 
          console.log("login returned with result : " + loginResult.userId); 
          var theUserAuthId = loginResult.userId; 

          this._zumoClient.invokeApi('UserUtils/insert', { 
           method: 'POST', 
           body: { userAuthId: theUserAuthId } 
          }) 
           .done(
           (loginResult: any) => { 
            resolve(loginResult) 
           }, 
           (loginErr: any) => { 
             reject(loginErr); 
           } 
           ); 
         }, 
         (loginErr: any) => { 
          reject(loginErr); 
         } 
        ) 
      ); 

      return p; 
     } 

這首先調用我的customAPI的'invokeAPI'效果很好。然後,我嘗試調用另一個customAPI'usersSocialContacts'(一個http GET),我得到了401 - '未經請求的請求'(我'已'將'權限'設置爲'只有經過身份驗證的用戶',因爲這個customAPI)。

public getUserSocialContacts() { 
    var p: Promise<any> = new Promise(
     (resolve: (result: any) => void, reject: (err: any) => void) => 
      this._zumoClient.invokeApi('UserUtils/userSocialContacts', { 
       method: 'GET' 
      }) 
      .done(
       (contactsResult: any) => { 
        console.log("got contacts -" + JSON.stringify(contactsResult)); 
        resolve(contactsResult); 
       }, 
       (contatcsErr: any) => { 
        reject(contatcsErr); 
       } 
      ) 


    ); 

    return p; 
} 

如果我設置得到許可讓這個customAPI爲「允許用戶與應用程序鍵」,然後API函數被調用,但request.user是不確定的。

這是如何工作的,我如何讓自定義API讓我們知道這個用戶已經通過身份驗證,並且在js客戶端的每個請求中傳遞用戶。我在一些SO問題或谷歌搜索中讀了一些建議,以緩存用戶的身份驗證令牌,並在每次請求中將它傳遞給zumo服務,在login調用中使用可選的過濾器對象,發現了C#/。net的一些示例,找到任何明確的例子或文檔的JavaScript客戶端,也許我錯過了。 Azure文檔給出了一個從js客戶端調用customAPI的js示例,但它不顯示緩存部分,並在隨後的請求中發送經過身份驗證的用戶。

希望在這方面有任何知識共享或任何指向正確文檔的指針。

回答

1

如果您只希望登錄用戶訪問自定義api,那麼您需要將權限設置爲「只有經過身份驗證的用戶」。

一旦用戶登錄,如果您正在使用MobileServiceClient的同一個實例(未註銷),然後謨服務所作的任何請求應包含謨的身份驗證令牌。

在我的問題提到
+0

,我已經試過這兩個「只有認證用戶」和「」允許用戶與應用程序鍵」我customAPI權限。對我而言,在登錄的成功回調中,分別將userId和accessTokens zumo clinet的屬性設置爲loginResult.userId和loginResult.mobileServiceAuthenticationToken。 – kkap

相關問題