C#Google OAuth2获取当前登录用户的电子邮件

时间:2016-08-23 07:18:46

标签: c# google-api google-oauth google-api-dotnet-client google-sheets-api

我最近刚试用Google Apis并且对此非常陌生。我花了最近2个小时搜索如何获取允许访问API的电子邮件以及如何自动刷新令牌。

我的代码与教程

非常相似
class GoogleAPI
    {
        // If modifying these scopes, delete your previously saved credentials
        // at ~/.credentials/sheets.googleapis.com-dotnet-quickstart.json
        static string[] Scopes = { SheetsService.Scope.Spreadsheets };
        static string ApplicationName = "Google Sheets API .NET Quickstart";

        public GoogleAPI()
        {
            UserCredential credential;

            using (var stream =
                new FileStream("Secret.json", FileMode.Open, FileAccess.Read))
            {
                string credPath = System.Environment.GetFolderPath(
                    System.Environment.SpecialFolder.Personal);
                credPath = Path.Combine(credPath, ".credentials/Secret_Credentials.json");

                credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
                    GoogleClientSecrets.Load(stream).Secrets,
                    Scopes,
                    "user",
                    CancellationToken.None,
                    new FileDataStore(credPath, true)).Result;  
                Console.WriteLine("Credential file saved to: " + credPath);
            }

            // Create Google Sheets API service.
            var service = new SheetsService(new BaseClientService.Initializer()
                {
                    HttpClientInitializer = credential,
                    ApplicationName = ApplicationName,
                });

            // Define request parameters.
            String spreadsheetId = "1Jd9NgmnfvJzPtjXw_jNzSUAlOO532mF6ebYyIIle_H8";
            String range = "Sheet1!A:L";
            SpreadsheetsResource.ValuesResource.GetRequest request =
                    service.Spreadsheets.Values.Get(spreadsheetId, range);

            ValueRange response = request.Execute();

            var a = response;
            System.Windows.Forms.MessageBox.Show("success");

        }
    }

搜索之后,我认为我的令牌会在到期时自动刷新,所以我只留下1个问题。

问题:如何获取保存在凭据中的用户电子邮件。

我真的很陌生,请帮我解释一下它非常详细。

感谢@DaImTo

我终于明白了如何添加它。 他的教程 - > http://www.daimto.com/find-users-email-with-google-api/

使其有效的代码。

首先我们需要添加“电子邮件”作为范围,并记住删除旧凭据。

static string[] Scopes = { SheetsService.Scope.Spreadsheets, "email" };

其次,为google plus创建服务。

// Create Google Plus API service.
var plusService = new PlusService(new BaseClientService.Initializer()
{
    HttpClientInitializer = credential,
    ApplicationName = ApplicationName,
});

最后,收到电子邮件

var me = plusService.People.Get("me").Execute();
var useremail = me.Emails.FirstOrDefault().Value;

1 个答案:

答案 0 :(得分:0)

为什么要准确发送电子邮件?

访问令牌允许访问API。刷新令牌将在其到期(1小时)时自动更新访问令牌,这是FileDataStore的功能。

如果我正确读取credPath路径,文件数据存储已将您的凭据保存在%appData%中。

我知道获取当前经过身份验证的用户电子邮件的唯一方法是通过Google+ api People.get发送给我。您需要在请求中添加另一个范围。

  

如果使用userId值" me",此方法需要身份验证   使用已授予OAuth范围的令牌   https://www.googleapis.com/auth/plus.login或   https://www.googleapis.com/auth/plus.me。了解有关OAuth的更多信息。

代码:

Nuget包:

PM> Install-Package Google.Apis.Plus.v1

代码

var me = plusService.People.Get("me").Execute();
var useremail = me.Emails.FirstOrDefault().Value;