Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 谷歌+;Api获取用户电子邮件_Node.js_Google Api_Google Plus - Fatal编程技术网

Node.js 谷歌+;Api获取用户电子邮件

Node.js 谷歌+;Api获取用户电子邮件,node.js,google-api,google-plus,Node.js,Google Api,Google Plus,我正在用Google+API创建一个注册。在将数据插入我的用户表时,我希望获得用户的电子邮件。我尝试这样做时出错。我的代码如下所示: var API_KEY = 'A*****'; plus.people.get({ auth: API_KEY, userId: req.body.userID }, function (err, user) { if( err ) { res.json( JSON.stringify( err ) ); return

我正在用Google+API创建一个注册。在将数据插入我的用户表时,我希望获得用户的电子邮件。我尝试这样做时出错。我的代码如下所示:

var API_KEY = 'A*****';         

plus.people.get({
    auth: API_KEY,
    userId: req.body.userID
}, function (err, user) {
    if( err ) { res.json( JSON.stringify( err ) );  return; }
    console.log(user.emails);

    User.find({ where:{ social_id:req.body.userID, type: 2 } }).then( existingUser =>{              
    if( existingUser ) throw new Error('social_user_existing');
    if(!existingUser){
    User.build({
        username: user.displayName,
        social_id : req.body.userID, 
        social_token :req.body.token, 
        type : 2
        }).save();                      
    }                          
    }).then(function( new_g_user ){                 
        return res.json( rs.success({ username: user.displayName, user_id: user.id, jwt: new_g_user.getJwt() }) );
    }).catch(function(err){
        res.json( rs.errorCode(err.message) );
    });   
});     

我尝试使用user.emails和user.emails[0].value获取用户的电子邮件,以至少获取第一封电子邮件的值。每次,响应都是“未定义的”。我提到user.kind是
“plus#person”
,而不是
“plus#personopendconnect”
。这能引起我的反应吗?谢谢大家!

您正在使用API密钥进行身份验证,这意味着您只能访问公共数据

请求

得到

回应

{
 "kind": "plus#person",
 "etag": "\"Sh4n9u6EtD24TM0RmWv7jTXojqc/8CXX3KsOcUfAF5mmrG4vyB-YNig\"",
 "occupation": "Google Developer Expert, BIA Developer at Targit",
 "skills": "Experience primarily in regards Microsoft products, Visual Studio, Bids, C# and asp.net.  Past experience with PHP,JavaScript, MySQL and Linux.  In recent years I have begun focusing on Business Intelligence, Data Warehousing, SQL Server / Analysis Services / Integration Services.   Experience with OAuth2, Google Analytics API, Google Drive SDK.",
 "gender": "female",
 "urls": [
  {
   "value": "http://www.youtube.com/user/Atthena71",
   "type": "otherProfile",
   "label": "Linda Lawton"
  },
  {
   "value": "http://twitter.com/LindaLawtonDK",
   "type": "otherProfile",
   "label": "lindalawtondk"
  },
  {
   "value": "http://stackoverflow.com/users/1841839/daimto",
   "type": "otherProfile",
   "label": "Stackoverflow / StackExchange"
  },
  {
   "value": "http://www.linkedin.com/profile/edit?trk=nav_responsive_sub_nav_edit_profile",
   "type": "otherProfile",
   "label": "Linkedin"
  },
  {
   "value": "http://daimto.com/",
   "type": "contributor",
   "label": "Daimto - data import tutorials"
  },
  {
   "value": "https://github.com/LindaLawton",
   "type": "contributor",
   "label": "GitHub - projects"
  },
  {
   "value": "https://github.com/google/google-api-dotnet-client",
   "type": "contributor",
   "label": "Google APIs .Net client - GitHub"
  },
  {
   "value": "https://github.com/LindaLawton/Google-Dotnet-Samples",
   "type": "contributor",
   "label": "Google APIs .Net Samples - GitHub "
  },
  {
   "value": "https://developers.google.com/analytics/",
   "type": "other",
   "label": "Google Analytics"
  },
  {
   "value": "https://developers.google.com/",
   "type": "other",
   "label": "Google Developers"
  },
  {
   "value": "https://developers.google.com/experts/+LindaLawton",
   "type": "other",
   "label": "Google Developer Expert - Linda Lawton"
  }
 ],
 "objectType": "person",
 "id": "117200475532672775346",
 "displayName": "Linda Lawton",
 "name": {
  "familyName": "Lawton",
  "givenName": "Linda"
 },
 "tagline": "Google Developer Expert 2014 - 2017",
 "braggingRights": "Extreme Beekeeper first to recorded an Hive inspection using Google Glass with out a veil on.",
 "aboutMe": "\u003cdiv\u003e\u003cb\u003eBackground\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003e\u003cdiv\u003eI have been working as an application developer since 1995. I have worked with a number of database systems Oracle, Microsoft SQL Server, and MySQL.  In recent years I have been mainly working with Microsoft products, Visual Studio, SSIS, and C#.   I the past I worked a lot with web development PHP, JavaScript, Ajax, power-builder,  Cobol and ASP.net.\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eWhile I have done front end development in the past. I find working with backed development working on automated systems fascinating.    I have spent the last 5 years creating custom SSIS (Dlls), and services and APIs for the cloud (Azure).\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003eGoogle API Addiction\u003c/b\u003e \u003c/div\u003e\u003cdiv\u003eIn 2012 I began working with the Google APIs, starting with the Google Analytics API.  I learned to appreciate the fact that Google is so open and willing to give us access to their systems. I started blogging about how to use the APIs writing short tutorials with sample projects.   \u003ca href=\"http://www.daimto.com/\" rel=\"nofollow\" target=\"_blank\"\u003eDaimto - Data Import Tutorials\u003c/a\u003e.   This along with my presents on a number of \u003ca href=\"http://stackoverflow.com/users/1841839/daimto\" rel=\"nofollow\" target=\"_blank\"\u003eDeveloper forms\u003c/a\u003e lead me to discovered by Google.  I became one of the first \u003ca href=\"https://developers.google.com/experts/+LindaLawton\" rel=\"nofollow\" target=\"_blank\"\u003eGoogle Developer Experts for Google Analytics\u003c/a\u003e.  \u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003eI also help support the \u003ca href=\"https://github.com/google/google-api-dotnet-client\" rel=\"nofollow\" target=\"_blank\"\u003eGoogle APIs client Library for .NET\u003c/a\u003e which provides simple, flexible, and powerful access to Google APIs such as Drive, YouTube, Calendar, Storage and Analytics.\u003c/div\u003e\u003cdiv\u003e\u003cbr /\u003e\u003c/div\u003e\u003cdiv\u003e\u003cb\u003eLife\u003c/b\u003e\u003c/div\u003e\u003cdiv\u003eI grew up in a small town in \u003ca href=\"http://en.wikipedia.org/wiki/Dartmouth,_Massachusetts\" rel=\"nofollow\" target=\"_blank\"\u003eMassachusetts\u003c/a\u003e, USA, I moved to \u003ca href=\"http://en.wikipedia.org/wiki/Denmark\" rel=\"nofollow\" target=\"_blank\"\u003eDenmark \u003c/a\u003ein 1998 and have lived here since. I have a 22 year old daughter.  My hobbies include reading science fiction, painting, and gardening.   \u003c/div\u003e",
 "url": "https://plus.google.com/+LindaLawton",
 "image": {
  "url": "https://lh5.googleusercontent.com/-a1CWlFnA5xE/AAAAAAAAAAI/AAAAAAAAdVM/sHkU9F-AwwQ/photo.jpg?sz=50",
  "isDefault": false
 },
 "organizations": [
  {
   "name": "Newberry College",
   "title": "computer science",
   "type": "school",
   "startDate": "1991",
   "endDate": "1994",
   "primary": false
  },
  {
   "name": "TARGIT",
   "title": "Business Intelligence Developer",
   "type": "work",
   "startDate": "2011",
   "primary": true
  },
  {
   "name": "Logimatic",
   "title": "developer",
   "type": "work",
   "startDate": "2008",
   "endDate": "2010",
   "primary": false
  }
 ],
 "placesLived": [
  {
   "value": "Aalborg Denmark",
   "primary": true
  },
  {
   "value": "Marathon Florida"
  },
  {
   "value": "Dartmouth Massachusetts"
  },
  {
   "value": "Ashford Connecticut"
  },
  {
   "value": "Nykøbing Mors Denmark"
  }
 ],
 "isPlusUser": true,
 "circledByCount": 2006,
 "verified": false,
 "cover": {
  "layout": "banner",
  "coverPhoto": {
   "url": "https://lh3.googleusercontent.com/t2ViXd7ar3MeiOCeTe2g86Qd7wOnbRvuf3eTW3LPrs8jwBJwKS6gsC4KWhvbRSytJ5fsDne3sw=s630-fcrop64=1,00000000ffffffff",
   "height": 528,
   "width": 940
  },
  "coverInfo": {
   "topImageOffset": 0,
   "leftImageOffset": 0
  }
 }
}

只返回用户设置为public的内容。如果他们的电子邮件不是公开的,您将无法看到它。

正如@DalmTo提到的,API密钥可用于访问公开数据。如果要访问用户的私有信息,必须使用OAuth

使用来自的
OAuth2
类设置身份验证:

const google = require('googleapis');
const OAuth2 = google.auth.OAuth2;

const CREDENTIALS = require("./credentials.json");

var googleAuth = new OAuth2(
  CREDENTIALS.web.client_id,
  CREDENTIALS.web.client_secret,
  CREDENTIALS.web.redirect_uris[0]
);
credentials.json
是您可以从Google应用程序(凭据部分)下载的文件,其中包含应用程序密钥

获得访问令牌后,您需要执行以下操作:

googleAuth.setCredentials({
  access_token: yourAccessToken
});
最后,不要使用
auth:API\u KEY
而是执行
auth:googleAuth

plus.people.get({
    auth: googleAuth,
    userId: req.body.userID
}, function (err, user) {
    if( err ) { res.json( JSON.stringify( err ) );  return; }
    console.log(user.emails);
});
如果一切顺利,您应该能够从用户那里获得私人信息

请注意,要访问电子邮件,您需要
https://www.googleapis.com/auth/userinfo.email
范围


要获取用于测试的访问令牌,可以使用OAuth平台:

  • 打开
  • 输入所需的身份验证范围,然后单击蓝色按钮:

    它将进行几个重定向

  • 在步骤2中,再次单击蓝色按钮以将授权代码交换为访问令牌

  • 现在,您将在屏幕右侧看到您的
    访问\u令牌

    {
      "access_token": "ya29.G....OEDi", 
      "token_type": "Bearer", 
      "expires_in": 3600, 
      "refresh_token": "....hLA", 
      "id_token": ".....B1LGce02PMQHig"
    }
    

    您可以使用它进行测试。在应用程序中实现OAuth2时,您需要按照OAuth2协议规则设置重定向。

    感谢您快速完整的回答!请告诉我如何才能获得用户的电子邮件地址,即使不是公开的?我应该用包含clientID和clientSecret的对象替换API密钥吗?如果是的话,我下一步该怎么办?据我所知,如果某人的电子邮件地址未设置为公共,则无法获取该地址。谷歌没有电子邮件地址API,这在很多方面都很糟糕。根据以下文档:,它说:“在你的应用程序可以使用谷歌API访问私有数据之前…”,如果使用OAuth,我可以访问私有数据。所以,我想,我必须改变我的代码。非常感谢。如果您使用谷歌登录,请尝试查看电子邮件范围。这样您就可以访问与他们的帐户关联的电子邮件地址。