2016-02-29 27 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

相关问题