2013-05-24 4 views
0

J'ai autorisé l'objet DriveService. Yat-il un moyen d'obtenir un courriel d'un utilisateur autorisé? Je suis en mesure d'obtenir le nom d'affichage, mais pas l'adresse e-mail.Obtenir google Email à partir de l'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 La fonction ouvre le navigateur et permet à l'utilisateur d'autoriser.

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(); 
} 

Merci d'avance.

+0

Pouvez-vous nous montrer vos codes actuels? – Raptor

+0

Code source ajouté. – axe

+0

Vous utilisez Google Drive pour obtenir les détails de l'utilisateur? Vous êtes dans la mauvaise direction. L'objet utilisateur ne contient pas d'e-mail. Référence: https://developers.google.com/drive/v2/reference/about/get – Raptor

Répondre

1

Ajouter cette URL pour la portée:

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

Il charge le nom, url profil public, e-mail, sexe, photo, etc.

et une fois que vous êtes autorisé obtenir les informations à partir de cette réponse 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

Ajouter le champ à votre constructeur AuthorizationState

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

Merci. Pas moyen de l'obtenir en utilisant l'API? – axe

+0

@axe Réponse mise à jour –

+0

Je n'ai pas compris. Comment obtenez-vous un email ici? – axe

0

Utilisez 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(); 
Questions connexes