正在尝试获取有关已验证用户的信息

trying to get info about authenticated user

本文关键字:验证 用户 信息 获取      更新时间:2023-09-26

我使用Azure移动应用程序进行谷歌身份验证,使用以下代码:

var client = new WindowsAzure.MobileServiceClient(appUrl);
    client.login("google").done(function (results) {
    console.log("You are now logged in as: " + results.userId);                             
}, function (err) {
       console.log("Error: " + err);
    });

它是有效的。但当我试图获得有关已验证用户的信息时,在完成的功能中添加代码:

var url = client.applicationUrl + '/.auth/me';
fetch(url)
    .then(function (data) {
          return data.json()
     }).then(function (user) {
// The user object contains the claims for the authenticated user
});

我得到以下错误:

无法加载Fetch APIhttps://accounts.google.com/o/oauth2/v2/auth?response_type=code&client_id=3…请求的上不存在"Access Control Allow Origin"标头资源因此,不允许访问源"null"。如果不透明响应满足您的需求,将请求的模式设置为"无cors"以获取禁用CORS的资源。

这个错误与跨来源请求有关,可以通过两种方式解决:

  1. 使用jsonp代替json,但我不知道fetch函数如何使用jsonp
  2. 为了更好地使用CORS,这个CORS选项应该在谷歌开发者控制台中激活

可能问题是,我的web应用程序和Azure移动应用程序位于不同的域上,但我在谷歌开发者控制台上将这两个域都添加到了授权JavaScript源中。

顺便说一句,上面的错误我在Chrome中得到。如果我尝试Edge,我会得到以下错误:

SCRIPT5022:ReferenceError:"fetch"未定义

因为Edge还不支持fetch。

我建议将以下配置应用于此处的Azure移动服务。

   <system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Headers" value="Content-Type" />
      </customHeaders>
    </httpProtocol>
  </system.webServer>

或者,它可能是本文中讨论的一个bug。