34

链接:https ://sites.google.com/site/oauthgoog/Home/emaildisplayscope

从上面的链接中,我添加了电子邮件范围

https://www.googleapis.com/auth/plus.me
https://www.googleapis.com/auth/userinfo.email

但我不明白以下内容

拥有有效的 OAuth 令牌后,您可以使用它对电子邮件显示 API 端点进行 API 调用:https: //www.googleapis.com/userinfo/email 如果令牌无效,将返回 401 错误。如果令牌有效,则返回用户的电子邮件地址。API 还将返回一个布尔值,以指示 Google 是否已验证用户拥有该电子邮件地址。但是,大多数已安装的应用程序将忽略该值。

如何调用电子邮件显示 API 端点?使用https://www.googleapis.com/userinfo/email

4

4 回答 4

54

将范围设置为:

并使用端点:

https://www.googleapis.com/oauth2/v1/userinfo?alt=json

用法:

get https://www.googleapis.com/oauth2/v1/userinfo?alt=json&access_token=youraccess_token

您将获得 JSON:

{ "id": "xx", 
  "name": "xx", 
  "given_name": "xx", 
  "family_name": "xx", 
  "link": "xx", 
  "picture": "xx", 
  "gender": "xx", 
  "locale": "xx" 
}
于 2012-07-23T03:43:01.473 回答
34

Google+ 登录的范围已更改。

将范围设置为:

https://www.googleapis.com/auth/plus.login
https://www.googleapis.com/auth/userinfo.email

JavaScript 调用如下所示:

gapi.client.load('oauth2', 'v2', function() {
  gapi.client.oauth2.userinfo.get().execute(function(resp) {
    // Shows user email
    console.log(resp.email);
  })
});

gapi.client.load('plus', 'v1', function() {
  gapi.client.plus.people.get( {'userId' : 'me'} ).execute(function(resp) {
    // Shows profile information
    console.log(resp);
  })
});

更多信息https://developers.google.com/+

编辑:请注意,您不需要 plus.me 或 userinfo.profile 的范围。

于 2013-03-13T12:12:07.527 回答
17

现在我们将 GoogleAPI 与 Google+ 一起使用

截至 2013 年 12 月,这里是最新的网站;

https://developers.google.com/+/

然后为 Web 登录

https://developers.google.com/+/web/signin/

选择登录流程

->客户端流程

->使用 JavaScript 启动登录流程我相信这是最新技术

https://developers.google.com/+/web/signin/javascript-flow

使用 JavaScript 启动 Google+ 登录流程

您可以使用gapi.auth.signIn() 方法启动 Google+ 登录流程。此方法为您提供了很大的灵活性来决定如何以及何时提示用户授权您的应用和登录。

https://developers.google.com/+/web/api/javascript#gapiauthsigninparameters

gapi.auth.signIn(参数)

启动客户端 Google+ 登录 OAuth 2.0 流程。与 gapi.auth.authorize() 类似,只是此方法支持高级 Google+ 登录功能,包括无线安装 Android 应用程序。此方法是使用 Google+ 登录按钮小部件的 JavaScript 替代方法。

https://developers.google.com/+/web/signin/javascript-flow

  • 尝试使用页面触发登录流程gapi.auth.signIn()

https://google-developers.appspot.com/+/demos/signin_demo_render (SourceCode)

您将尝试这个,并为您自己的,按照

第 1 步:创建客户端 ID 和客户端密码

忽略以下步骤,

实际上,您只需要 clientID 并替换上面Try it的源代码中的那个。

添加范围 https://www.googleapis.com/auth/userinfo.email

var options = {
  'callback': loginFinished,
  'approvalprompt': 'force',
  'clientid': 'YOURID.apps.googleusercontent.com',
  'scope': 'https://www.googleapis.com/auth/plus.login https://www.googleapis.com/auth/userinfo.email',
  'requestvisibleactions': 'http://schemas.google.com/CommentActivity http://schemas.google.com/ReviewActivity',
  'cookiepolicy': 'single_host_origin'
};

添加

gapi.client.load('oauth2', 'v2', function()
  {
    gapi.client.oauth2.userinfo.get()
      .execute(function(resp)
      {
        // Shows user email
        console.log(resp.email);
      });
  });

这是基于上述内容的完整工作和简洁代码:

<html>
<head>
  <title>Google+ Sign-in button demo: rendering with JavaScript</title>
  <style type="text/css">
  html, body { margin: 0; padding:0;}
  #signin-button {
   padding: 5px;
  }
  #oauth2-results pre { margin: 0; padding:0; width: 600px;}
  .hide { display: none;}
  .show { display: block;}
  </style>

  <script src="https://apis.google.com/js/client:platform.js" type="text/javascript"></script>
  <script type="text/javascript">
var loginFinished = function(authResult)
{
  if (authResult)
  {
    console.log(authResult);
  }

  gapi.client.load('oauth2', 'v2', function()
  {
    gapi.client.oauth2.userinfo.get()
      .execute(function(resp)
      {
        // Shows user email
        console.log(resp.email);
      });
  });

};

var options = {
  'callback': loginFinished,
  'approvalprompt': 'force',
  'clientid': 'YOURID.apps.googleusercontent.com',
  'scope': 'https://www.googleapis.com/auth/plus.login https://www.googleapis.com/auth/userinfo.email',
  'requestvisibleactions': 'http://schemas.google.com/CommentActivity http://schemas.google.com/ReviewActivity',
  'cookiepolicy': 'single_host_origin'
};

var renderBtn = function()
{
  gapi.signin.render('renderMe', options);
}
  </script>

</head>
<body onload ="renderBtn()">
   <div id="renderMe"></div>  
</body>
</html>

没有 HTML 输出,但控制台。所以打开浏览器的开发者控制台工具来查看结果。

于 2013-12-10T11:58:46.067 回答
1

我在 angularjs 中,在 Ionic 框架中做了这个,它可以工作。试试这个。

controller("OauthExample", function($scope, $cordovaOauth, $http) {

    $scope.googleLogin = function() {
        $cordovaOauth.google("YOUR CLIENTID", ["https://www.googleapis.com/auth/userinfo.email", "https://www.googleapis.com/auth/userinfo.profile"]).then(function(result) {
            window.localStorage.setItem("access_token", result.access_token);
            $scope.token=JSON.stringify(result);

        }, function(error) {
            console.log(error);
        });
    }


        $scope.getProfileInfo = function() {
            console.log(window.localStorage.getItem('access_token'));
        $http.defaults.headers.common.Authorization = "Bearer " + window.localStorage.getItem("access_token");
        $http.get("https://www.googleapis.com/oauth2/v1/userinfo?alt=json")
            .success(function(data) {
                console.log(data);
                console.log(data.email);
            })
            .error(function(error) {
                console.log(error);
            });
    }

});
于 2015-10-16T17:02:31.337 回答