如何使用Firebase GoogleAuthProvider删除电子邮件范围并仅添加youtube.readonly范围

时间:2017-03-03 19:25:56

标签: angular firebase google-oauth angularfire2

我尝试使用Firebase和Angular 2来验证用户进入我的应用并获取用户的YouTube频道信息。这是我的代码:

   return new Promise((resolve, reject) => {
    let provider = new firebase.auth.GoogleAuthProvider();
    let token: any;
    let fullData: any;
    provider.addScope('https://www.googleapis.com/auth/youtube.readonly');
    firebase.auth().signInWithPopup(provider).then(result => {
      token = result.credential.accessToken;

      fullData = {
        uid: (result.user.uid || ""),
        photoURL: (result.user.photoURL || ""),
        name: (result.user.displayName || ""),
        youtube_channel: {}
      }

      let headers = new Headers();
      let googleAPI = "https://www.googleapis.com/youtube/v3/channels?part=brandingSettings%2C+snippet%2C+id%2C+statistics&mine=true";
      headers.append('Authorization', 'Bearer ' + token);
      headers.append('Content-Type', 'application/json');

      return this.http.get(googleAPI, { headers })
        .map(res => res.json())
        .subscribe(data => {
          fullData.youtube_channel = data;

          return this.userProfile.child(fullData.uid).update(fullData).then(_ => {
            resolve(fullData);
          });

        })
    }).catch(err => {
      console.error(err);
      resolve();
    })
  });

问题在于运行此代码时,它可以正常运行并获取我需要的信息并将用户登录。但谷歌会询问用户的电子邮件,个人资料和YouTube阅读权限。我只想要个人资料和YouTube阅读权限,但不要发送电子邮件 - 我不希望谷歌的Oauth窗口弹出窗口要求用户的电子邮件。

在Firebase中只有provider.addScope('...'),但是我可以删除电子邮件范围(我猜这是默认范围吗?)。 Firebase专家,请帮忙!

1 个答案:

答案 0 :(得分:1)

email范围实际上是由Firebase自动添加的,无法删除。

我建议使用Google登录库gapi.auth2和Firebase的signInWithCredential方法。这样您就可以根据需要自定义范围。

您可以按照代码示例here了解如何将Google登录库与Firebase集成。

你必须添加这个:

<meta name="google-signin-fetch_basic_profile" content="false">

文件中的there以下。这将禁用自动添加email profile openid作为范围。然后更新"google-signin-scope"元标记,仅询问openid profile以及您需要的YouTube范围。 Firebase需要openid才能加载用户的个人资料。

您必须将developers console中的原点列入白名单。转到Api Manager&gt;凭据,在OAuth 2.0客户端ID下查找Web客户端ID。点击它,您就可以添加应用程序的来源。

让我知道这是否有效!