我正在使用Google Auth 2.0的javascript api。即使我使用https://www.googleapis.com/auth/userinfo.email请求,我也遇到了用户电子邮件未显示的问题。
我的代码如下所示:
gapi.auth.authorize({
client_id : 'xxxxxxxxxx.apps.googleusercontent.com',
scope : ['https://www.googleapis.com/auth/plus.me', 'https://www.googleapis.com/auth/userinfo.email', 'https://www.googleapis.com/auth/userinfo.profile'],
immediate : false
}, function(result) {
if (result != null) {
gapi.client.load('plus', 'v1', function() {
var request = gapi.client.plus.people.get({
'userId' : 'me'
});
request.execute(function(resp) {
console.log(resp);
});
});
}
});
获取用户的电子邮件我缺少什么?
答案 0 :(得分:4)
虽然userinfo.email角色允许您访问该信息,但plus v1客户端不提供该信息。您需要对另一个端点进行额外调用才能获取信息。
您将需要oauth2 v2端点,您可以使用gapi.client.load('oauth2', 'v2', callback)
请求该端点。您想要的端点本身是gapi.client.oauth2.userinfo.get()
。这是未经测试的,但代码可能类似于:
gapi.client.load('oath2','v2',function(){
gapi.client.oauth2.userinfo.get().execute(function(resp){
console.log(resp);
});
});
有关相关问题,请参阅How can I get the user's email address in google apps?和Why can't I retrieve the users email from Google Plus API after getting permission;有关官方文档的详细信息,请参见https://developers.google.com/accounts/docs/OAuth2。
答案 1 :(得分:2)
我是这样做的:
function tryAuth() {
var clientId = CLIENT_ID;
var configString = {
client_id: clientId,
scope: SCOPE,
immediate: 'false'
};
gapi.auth.authorize(configString, handleAuthResult);
}
SCOPE = 'https://www.googleapis.com/auth/fusiontables email';
将https://www.googleapis.com/auth/fusiontables范围替换为您的范围,但请保留“电子邮件”。
function handleAuthResult(authResult) {
if (authResult && !authResult.error) {
var access_token = authResult.access_token;
alert('Successfully logged in.' + access_token);
tryGetEmail(access_token);
}
然后
function tryGetEmail(access_token) {
var xmlHttp = new XMLHttpRequest();
xmlHttp.open("GET", 'https://www.googleapis.com/oauth2/v1/userinfo?access_token=' + access_token, false );
xmlHttp.send( null );
if(xmlHttp.status == 200) {
var strJSON = xmlHttp.responseText;
var objJSON = eval("(function(){return " + strJSON + ";})()");
email = objJSON.email;
alert('got email ' + email);
}
}
答案 2 :(得分:0)
不推荐使用userinfo端点和oauth2 v2。较旧的答案适用于旧系统。迁移的所有细节都在这里:
https://developers.google.com/+/api/auth-migration#email
简而言之:发送电子邮件'而不是&ttps://www.googleapis.com/auth/userinfo.email'对于您的范围,G +电子邮件将作为“电子邮件”的第一个条目包含在内。 “人物”中的财产反对你的对象。在链接中描述的一个选项显然是将其从ID令牌中拉出来,在上面的链接中引用。