在Firebase Microsoft帐户身份验证中从用户获取电子邮件

时间:2019-04-14 19:30:28

标签: javascript firebase firebase-authentication microsoft-graph

我正在使用以下代码来验证使用Microsoft帐户登录的Firebase用户:

x          y
10         10
27.5       10
45         10
...
75         6
77         6
79         6
80         5
81         5
82         5

但是,当我尝试使用以下代码访问用户的电子邮件时:

  signInMicrosoft = () => {
    var provider = new firebase.auth.OAuthProvider('microsoft.com');
    provider.addScope('openid');
    provider.addScope('email');
    firebase
      .auth()
      .signInWithPopup(provider)
      .then(
        function(result) {
          console.log('result', result)
          var token = result.credential.accessToken;
          var user = result.user;
          var isNewUser = result.additionalUserInfo.isNewUser;
          //window.location.href = "/";
        }.bind(this)
      )
      .catch(function(error) {
        // Handle Errors here.
        var errorCode = error.code;
        var errorMessage = error.message;
        this.setState({
          loginError: true
        });
        // The email of the user's account used.
        var email = error.email;
        // The firebase.auth.AuthCredential type that was used.
        var credential = error.credential;
        // ...
    });
  }

“ user.email”条目设置为null。如何启用Firebase以这种方式访问​​Microsoft帐户的电子邮件,以便将“ user.email”设置为用户的电子邮件?

1 个答案:

答案 0 :(得分:1)

我尝试过。

我可以获取电子邮件地址。

请参阅:

  

这时,对应用程序的初始同意将自动包含offline_access(“保持对您有权访问的数据的访问”)和user.read(“登录并阅读您的个人资料”)权限。这些权限通常是应用程序正常运行所必需的-offline_access使应用程序可以访问刷新令牌,这对于本机和Web应用程序至关重要,而user.read则可以访问子声明,从而允许客户端或应用程序随着时间的推移正确识别用户,并访问基本的用户信息

  

重要当前,Microsoft身份验证库(MSAL)当前默认在授权和令牌请求中指定offline_access,openid,配置文件和电子邮件。这意味着,在默认情况下,如果您明确指定这些权限,则Azure AD可能会返回错误。

provider.addScope();是不必要的。

请尝试注释掉或删除provider.addScope();

    // provider.addScope('openid');
    // provider.addScope('email');

您应该检查Microsoft应用程序设置。

Microsoft Graph权限>委派的权限设置为User.Read。?

备注:

以下文档中的

provider.addScope('mail.read');允许该应用读取用户邮箱中的电子邮件。 不允许该应用读取用户的电子邮件地址。