2017-05-31 14 views
1

私はGoogle+で登録するAPIを作成しています。私のUsersテーブルにデータを挿入するとき、私はユーザーの電子メールを取得したいと思います。私はそれをしようとするとエラーが発生します。私のコードは次のようになります。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)); 
    }); 
});  

I [0]は最初の電子メールの少なくとも値を取得するために.VALUE user.emailsとuser.emailsを持つユーザーの電子メールを取得しようとしました。毎回、その応答は「未定義」でした。私はuser.kindが'plus#person'であり、"plus#personOpenIdConnect"ではないことに言及しています。これは私が得る応答を引き起こすことができますか?ありがとうございました!

答えて

1

@Dalm前述のとおり、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の遊び場を使用することができます。

  1. オープンhttps://developers.google.com/oauthplayground/
  2. 必要な認証のスコープを入力し、[青]ボタンをクリックします。

    リダイレクトを2回行います。

  3. ステップ2は、アクセストークンに認証コードを交換し、再び青いボタンをクリックしてください。

そして今、あなたはあなたのaccess_token画面の右側に表示されます。

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

あなたがテストのためにそれを使用することができます。アプリでOAuth2を実装する場合は、OAuth2プロトコルのルールに従ってリダイレクトを設定する必要があります。

2

APIキーを使用して認証するので、公開データにのみアクセスできます。

要求

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

は、ユーザーがパブリックに設定されている言っ返しに行くになってしまいます。彼らの電子メールが公開されていない場合、あなたはそれを見ることができないでしょう。

+0

迅速かつ完全な回答ありがとうございます!公開していなくても、ユーザーの電子メールアドレスを取得するにはどうすればいいですか? APIキーをclientIDとclientSecretを含むオブジェクトに置き換えますか?肯定的なら、私は次に何をすべきですか? –

+0

私の知る限り、パブリックに設定されていない場合、誰かの電子メールアドレスを取得する方法はありません。 Googleには電子メールアドレスAPIがありません。これは非常に多くの点で悪いことです。 – DaImTo

+0

このドキュメントによれば、https://developers.google.com/identity/protocols/OAuth2では、「あなたのアプリケーションがGoogle APIを使用してプライベートデータにアクセスする前に...」と言って、OAuthを使用している場合はプライベートデータにアクセスできます。だから、私は自分のコードを変更する必要があると思います。ありがとうございました! –

関連する問題