我在混合应用程序中使用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