2013-05-24 4 views
0

У меня есть авторизованный объект DriveService. Есть ли способ получить электронную почту авторизованного пользователя? Я могу получить отображаемое имя, но не адрес электронной почты.Получить адрес электронной почты от API

OAuth2Authenticator auth = new OAuth2Authenticator<NativeApplicationClient>(provider, client => GetAuthorization(client)); 

DriveService service = new DriveService(
    new BaseClientService.Initializer() 
     { 
      Authenticator = auth 
     } 
    ); 

Console.WriteLine(service_.About.Get().Fetch().User.DisplayName); 

GetAuthorization Функция открывает браузер и позволяет авторизоваться.

private static IAuthorizationState GetAuthorization(NativeApplicationClient arg) 
{ 
    IAuthorizationState state = new AuthorizationState(new[] 
    { 
     "https://www.googleapis.com/auth/drive", 
     "https://www.googleapis.com/auth/drive.file", 
     "https://www.googleapis.com/auth/drive.metadata.readonly", 
     "https://www.googleapis.com/auth/drive.readonly" 
    }); 

    state.Callback = new Uri(NativeApplicationClient.OutOfBandCallbackUrl); 

    using (LoginWindow login = new LoginWindow(arg.RequestUserAuthorization(state).ToString())) 
    { 
     if (login.ShowDialog() == DialogResult.OK) 
     { 
      return arg.ProcessUserAuthorization(login.AuthorizationToken, state); 
     } 
    } 

    throw new UnauthorizedAccessException(); 
} 

Заранее спасибо.

+0

Можете ли вы показать нам свои текущие коды? – Raptor

+0

Добавлен исходный код. – axe

+0

Вы используете Google Диск, чтобы получить информацию о пользователе? Вы в неправильном направлении. Пользовательский объект не содержит электронной почты. Ссылка: https://developers.google.com/drive/v2/reference/about/get – Raptor

ответ

1

Добавить URL размаху:

https://www.googleapis.com/auth/userinfo.profile

Он загружает имя, общедоступный профиль URL, адрес электронной почты, пол, фото и т.д.

и после того, как вы имеете право получить информацию от этого ответа Json:

https://www.googleapis.com/oauth2/v1/userinfo?alt=json

IAuthorizationState state = new AuthorizationState(new[] 
    { 
     "https://www.googleapis.com/auth/drive", 
     "https://www.googleapis.com/auth/drive.file", 
     "https://www.googleapis.com/auth/drive.metadata.readonly", 
     "https://www.googleapis.com/auth/drive.readonly" 
     "https://www.googleapis.com/auth/userinfo.email" 
    }); 

EDIT

Добавить сферу в свой AuthorizationState конструктор

List<string> scopes = new List<string>();     
scopes.Add("https://www.googleapis.com/auth/userinfo.email"); 
+0

Спасибо. Нет способа получить это с помощью API? – axe

+0

@axe Обновленный ответ –

+0

Я не понял. Как вы получаете электронную почту здесь? – axe

0
  1. Добавить сферу: https://www.googleapis.com/auth/userinfo.profile
  2. Используйте этот код:

    private string FetchUsersEmail() 
    { 
        var emailRequest = @"https://www.googleapis.com/userinfo/email?alt=json&access_token=" + GoogleAccessToken; 
        string jsonString; 
        var request = WebRequest.Create(emailRequest); 
    
        using (var response = (HttpWebResponse)request.GetResponse()) 
        using (var dataStream = response.GetResponseStream()) 
        using (var reader = new StreamReader(dataStream)) 
        { 
         jsonString = reader.ReadToEnd(); 
        } 
    
        var json = JToken.Parse(jsonString); 
        var currentGoogleEmail = json["data"]["email"].Value<string>(); 
    
        return currentGoogleEmail; 
    } 
    

    Я использую Newtonsoft для анализа json, но вы можете использовать любую другую библиотеку.

0

Использование About.get()

DriveService driveService = ... 

var req = driveService.About.Get(); 
req.Fields = "user(displayName,photoLink, me, emailAddress), storageQuota(limit,usage), maxImportSizes, maxUploadSize"; 
About ab = await req.ExecuteAsync(); 
Смежные вопросы