我正在创建一个使用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#personOpenIdConnect"
。这会导致我得到的反应吗?谢谢!
答案 0 :(得分:2)
您正在使用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的内容。如果他们的电子邮件不公开,您将无法看到它。
答案 1 :(得分:1)
正如@DalmTo所提到的,API密钥可用于访问公共数据。如果您想要访问用户私人信息,您必须使用OAuth。
使用googleapis
中的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_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步中再次点击蓝色按钮,将授权码交换为访问令牌。
现在,您将在屏幕右侧看到access_token
:
{
"access_token": "ya29.G....OEDi",
"token_type": "Bearer",
"expires_in": 3600,
"refresh_token": "....hLA",
"id_token": ".....B1LGce02PMQHig"
}
您可以将其用于测试。在您的应用中实施OAuth2时,您需要按照OAuth2协议规则设置重定向。