Google登录回调 - 获取姓名和电子邮件

时间:2014-10-16 16:59:14

标签: jquery google-api google-plus

我正尝试在登录时将基本的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上方的变量?

1 个答案:

答案 0 :(得分:1)

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

        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 people对象的嵌套结构: https://developers.google.com/+/api/latest/people

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