API входа в Google и электронные письма

#c# #google-plus #google-api-dotnet-client

#c# #google-plus #google-api-dotnet-client

Вопрос:

Я пытаюсь использовать API входа в Google в ASP.NET используя этот код:

 var flow = new GoogleAuthorizationCodeFlow(new GoogleAuthorizationCodeFlow.Initializer
{
   ClientSecrets = secrets,
   Scopes = new string[] { PlusService.Scope.PlusLogin }
});

token = flow.ExchangeCodeForTokenAsync("me", code, "postmessage", CancellationToken.None).Resu<

var service = new Oauth2Service(new Google.Apis.Services.BaseClientService.Initializer());
var request = service.Tokeninfo();
request.AccessToken = token.AccessToken;
var info = request.Execute();
// info.Email is null here
  

Как указано Email , поле at info равно нулю. Если я добавлю что-нибудь еще к Scopes «электронной почте» или «https://www.googleapis.com/auth/plus.profile.emails.read » (ссылка) Я получаю «invalid_scope»

Оставить это людям: получить API (ссылку) для получения электронных писем ничуть не лучше:

 var credential = new UserCredential(flow, info.UserId, token);
 plusService = new PlusService(new Google.Apis.Services.BaseClientService.Initializer()
 {
     ApplicationName = "Test",
     HttpClientInitializer = credential
 });

 var me = plusService.People.Get("me").Execute();
 // me.Emails is null
  

Чего мне здесь не хватает?

Ответ №1:

В массив областей вам нужно будет добавить PlusService.Scope.UserinfoEmail , чтобы иметь возможность просматривать информацию, связанную с электронной почтой.

 Scopes = new string[] { PlusService.Scope.PlusLogin,  PlusService.Scope.UserinfoEmail }
  

Кроме того, вам нужно будет объявить дополнительную область в атрибуте «data-scope» вашей кнопки входа. В этом случае это было бы

 data-scope="https://www.googleapis.com/auth/plus.login https://www.googleapis.com/auth/userinfo.email"
  

Надеюсь, это поможет.

РЕДАКТИРОВАТЬ.: Если вы используете https://github.com/googleplus/gplus-quickstart-csharp / в качестве отправной точки ваши данные должны выглядеть следующим образом: http://pastebin.com/VJzhzyyk

Комментарии:

1. нет, это не сработает, если я добавлю, как вы предлагаете, я получу Google.Apis.Auth. OAuth2.Ответы. Исключение TokenResponseException: Ошибка: «invalid_scope», Описание:»», Uri:»»

2. @Toolkit пожалуйста, проверьте, являются ли эти две области единственными, которые вы запросили как в части C #, так и в html

3. @ EvilBeer да, только две области. В тот момент, когда я добавляю вторую область в c #, у меня возникает ошибка invalid_scope. Я не могу найти ни одного рабочего примера c # с PlusService. Область применения. UserinfoEmail

4. @Toolkit не могли бы вы поделиться своей реализацией этого? (Ответ, который я опубликовал, — это то, что я успешно использую в своем приложении, поэтому проблема, скорее всего, где-то в другом месте)

5. Я основывался на официальном примере github.com/googleplus/gplus-quickstart-csharp В нем есть несколько ошибок, но я вижу идентификатор пользователя. Если я расширю его с помощью PlusService. Область применения. UserinfoEmail и измените область данных, как вы предлагаете, я получаю сообщение invalid_scope. Можете ли вы изменить его, чтобы получать электронную почту и публиковать здесь? Это было бы потрясающе. Но я могу сказать вам, что сам автор сказал мне переключиться на javascript-клиент, см. Комментарии здесь gusclass.com/blog/2014/07/29 /…