Google+ Api获取用户电子邮件

我正在使用Google+ API创build注册。 当我的用户表中插入数据时,我想获取用户的电子邮件。 尝试这样做时出现错误。 我的代码如下所示:

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获取用户的电子邮件,以获取至less第一封电子邮件的值。 每一次,响应都是“未定义的”。 我提到user.kind是'plus#person' ,而不是"plus#personOpenIdConnect" 。 这可以导致我得到的回应? 谢谢!

正如@Dalm所提到的,API密钥可以用来访问公共数据。 如果你想访问用户的私人信息,你必须使用OAuth。

使用googleapisOAuth2类设置身份validation:

 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_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作用域。


要获得访问令牌进行testing,您可以使用OAuth操作系统:

  1. 打开https://developers.google.com/oauthplayground/
  2. input您需要的validation范围,然后单击蓝色button:

    这将会产生一些redirect。

  3. 步骤2中再次点击蓝色button将授权码交换为访问令牌。

现在,你会在屏幕的右侧看到你的access_token

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

您可以使用它进行testing。 在您的应用中实现OAuth2时,您需要按照OAuth2协议规则设置redirect。

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

请求

GET https://www.googleapis.com/plus/v1/people/+lindalawton

响应

 { "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 } } } 

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