我尝试使用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专家,请帮忙!
答案 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。点击它,您就可以添加应用程序的来源。
让我知道这是否有效!