谷歌登录回调 – 获取姓名和电子邮件

我试图在登录时将基本的Google帐户信息(名称,电子邮件,ID。)捕获到数据库中。

我这样做是通过为他们的个人资料信息设置变量并通过AJAX更新数据库。

(参见下面的例子中的变量)

if (authResult['access_token']) { // The user is signed in this.authResult = authResult; helper.connectServer(); // After we load the Google+ API, render the profile data from Google+. //this renders profile information to the page just fine gapi.client.load('plus','v1',this.renderProfile); var email = gapi.client.load('plus','v1',this.getEmail); var acct_type = 'G'; var id = gapi.client.load('plus','v1',this.getId); var fname = gapi.client.load('plus','v1',this.getFname); var lname = gapi.client.load('plus','v1',this.getLname); //DO AJAX!! $.post("_google/processlogindata.php", { id:id, fname:fname, lname:lname, email:email, acct_type:acct_type }); 

ajax正在工作,它传递硬编码'G'并显示在数据库中。

当数据库默认为NULL时,其余变量显示为空白条目。

我复制了renderProfile因为它可以在页面上显示配置文件位。 这就是getFname的样子,例如(它们几乎都是一样的):

  getFname: function() { var request = gapi.client.plus.people.get( {'userId' : 'me'} ); request.execute( function(profile) { return profile.name.GivenName; });}, 

如果我将返回变量设置为像“name”这样的静态字符串,它将显示在数据库中。 所以问题肯定是我试图访问或保存此配置文件信息。

所以我的问题是,如何将这些配置文件对象正确地捕获到AJAX上方的变量?

我用以下代码解决了这个问题:

  var acct_type = 'G'; gapi.client.load('plus','v1', function(){ var request = gapi.client.plus.people.get({ 'userId': 'me' }); request.execute(function(resp) { var id = resp.id; var fname = resp.name.givenName; var lname = resp.name.familyName; var email = resp.emails[0].value; $.post("_yourDBinjection_.php", { id:id, fname:fname, lname:lname, email:email, acct_type:acct_type }); }); }); 

关键是它不使用外部函数或变量,它设置gapi.client.load函数参数中的所有内容,包括变量和发送ajax。

请注意,第三个参数(一个函数,无论是编写还是引用)在Google dev上列为“可选”,但如果没有它,它就不是很有用(返回一个promise?)所以你想要对加载的信息做任何事都应该完成在函数参数中。 出于某种原因,在这种情况下将其拼接出不同的外部函数,我最终无法触及或使用它上面的变量(但请注意, G在此示例中也通过了。)

我不喜欢嵌套函数,所以搞清楚这很奇怪。

参考

谷歌开发人员偷偷摸摸了很多例子和信息,所以这里有一些文章帮助我产生了这个答案:

(javascript版)
https://developers.google.com/+/api/latest/people/get#examples

非常模糊的gapi.client.load描述:
https://developers.google.com/api-client-library/javascript/reference/referencedocs#gapiclientload

登录资源

此页面显示了配置文件JSON返回的实时版本/代码示例: https : //developers.google.com/+/web/people/

本文将向您展示每个JSON人员对象的嵌套结构: https : //developers.google.com/+/api/latest/people

如果你找不到它,谷歌有一个隐藏的快速入门应用程序,用于javascript / jQuery登录,基本上可以为你登录,除非你想要它反弹到其他页面需要一些撕毁而不是用信息刷新自己。 我坦率地说明了我的需求。 https://developers.google.com/+/quickstart/java