使用google oauth2获取用户个人资料

时间:2011-10-01 20:52:02

标签: oauth-2.0 user-profile

我正在尝试使用google-oauth2登录时获取用户个人资料信息。用户成功登录,我可以获得access_token,并可以在需要时刷新令牌。 虽然我无法获得有关用户的任何信息,尽管阅读文档并尝试了几个小时。

来自developers guide的“检索个人资料”部分:

https://www.google.com/m8/feeds/profiles/domain/domainName/full

应该足够了。我尝试使用“gmail.com”,“google.com”,“gmail”,“google”,“orkut”,“orkut.com”,myregisteredtedappsdomainname(和.com)作为domainName。我也尝试了

https://www.google.com/m8/feeds/profiles/domain/domainName/full?access_token=access_token_for_user

我设法获得的是401错误,其中显示“那是一个错误。”。关于401错误,我已刷新令牌并再次使用新令牌,但仍然获得401s。

如何在登录时获取用户的个人资料信息和图片地址?

4 个答案:

答案 0 :(得分:2)

您正在寻找的范围是:

https://www.googleapis.com/oauth2/v1/userinfo

已经回答here

答案 1 :(得分:1)

即使在正确定义范围和访问令牌等之后,我也会收到类似的错误请求配置文件。我的诀窍是在我的请求中包含API版本。有关详细信息,请参阅此处http://code.google.com/googleapps/domain/profiles/developers_guide.html#Versioning

答案 2 :(得分:0)

也许很晚才能对某人有所帮助。下面是我为获取gplus用户个人资料而编写的工作代码

在HTML下面,标记将显示goolge signIn按钮

<span id="signinButton">
    <span
      class="g-signin"
      data-callback="signinCallback"
      data-clientid="YOUR GPLUS CLIENT ID"
      data-cookiepolicy="single_host_origin"
      data-scope="email">
    </span>
</span>   

以下是java脚本

 var access_token;
/**
 * Called when the Google+ client library reports authorization status.
 */
function signinCallback(authResult) {
    access_token = authResult.access_token;

    gapi.client.load('plus', 'v1', function () {
        gapi.client.plus.people.get({ userId: 'me' }).execute(printProfile);
    });
}

/**
 * Response callback for when the API client receives a response.
 *
 * @param resp The API response object with the user email and profile information.
 */
function printProfile(resp) {
    if (resp.code != 403) {
     console.log('name:' + access_token.givenname);
     console.log('last name:' + access_token.lastname);
     console.log('email:' + access_token.emails[0]);
     console.log('gender:' + access_token.gender);
     console.log('profile image url:' + access_token.image.url);
    }
}

请确保您在body标签内异步加载google api javascript,如下所示

            <script type="text/javascript">
                (function () {
                    var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
                    po.src = 'https://apis.google.com/js/platform.js';
                    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
                })();
</script>

要处理注销请参考我在下面链接中提供的答案,你需要在后端存储access_token,以便在注销时调用它来使用,在我的情况下我已经存储在会话中并通过ajax调用 gapi.auth.signOut(); not working I'm lost

答案 3 :(得分:-1)

嘿,你为什么不看看给出的代码: http://www.codeproject.com/KB/aspnet/OAuth4Client.aspx

它绝对有助于你。该项目实际上是一个oauth游乐场,可以将正确的oauth标头发送到正确的端点。