我在混合應用程序中使用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示例,但它不顯示緩存部分,並在隨後的請求中發送經過身份驗證的用戶。
希望在這方面有任何知識共享或任何指向正確文檔的指針。
,我已經試過這兩個「只有認證用戶」和「」允許用戶與應用程序鍵」我customAPI權限。對我而言,在登錄的成功回調中,分別將userId和accessTokens zumo clinet的屬性設置爲loginResult.userId和loginResult.mobileServiceAuthenticationToken。 – kkap