我已在我的示例中集成了Google API,以便通过Google+登录我的网站,以便从他/她的个人资料中获取用户电子邮件,名字和姓氏的详细信息。当我使用以下功能
public function getProfile()
{
$endpoint = 'https://www.googleapis.com/oauth2/v1/userinfo';
return (array) json_decode($this->_getData('profile', $endpoint));
}
我的输出为
Array ( [firstname] => xxxx [appid] => 11XXXXXXXXXXXXXXXXX92 [email] => [lastname] => YYYY [location] => [username] => XXXX YYYY )
email
为空的位置。
如何获取电子邮件ID?必须在$endpoint
写这个uri以获取电子邮件ID和其他数据吗?
答案 0 :(得分:2)
您没有显示您要求的范围,但您可能不会要求 https://www.googleapis.com/auth/userinfo.email 范围。
但是,已弃用userinfo范围和端点,并将于2014年9月删除。
接下来,您应该将电子邮件范围与其中一个配置文件范围(例如配置文件, https://www.googleapis.com/auth/plus.me 一起使用,或 https://www.googleapis.com/auth/plus.login )访问用户的电子邮件,然后使用其中一个Google+ API端点,例如people.get,用户ID为"我"
答案 1 :(得分:0)
@prison是现货,如果您请求email
范围,您将能够在plus.people.get
API调用中获取用户的电子邮件地址。我将在JavaScript中向您展示如何执行此操作:
在关闭正文标记之前使用以下代码添加Google API,这很丑陋,但却是异步加载外部库的标准:
<script type="text/javascript">
(function() {
var po = document.createElement('script');
po.type = 'text/javascript'; po.async = true;
po.src = 'https://plus.google.com/js/client:plusone.js';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(po, s);
})();
</script>
添加登录按钮:
<button class="g-signin"
data-scope="email"
data-clientId="YOUR_CLIENT_ID"
data-callback="onSignInCallback"
data-theme="dark"
data-cookiepolicy="single_host_origin">
</button>
处理登录回复:
function onSignInCallback(){
...
加载Google+ API客户端并处理身份验证响应:
gapi.client.load('plus','v1', function(){
if (authResult['access_token']) {
gapi.client.plus.people.get({'userId':'me'}).execute(
function(resp){
alert(resp.emails[0].value)
});
} else if (authResult['error']) {
// There was an error, which means the user is not signed in.
// As an example, you can handle by writing to the console:
console.log('There was an error: ' + authResult['error']);
}
console.log('authResult', authResult);
});
}