0

我有授权DriveService对象。有没有办法获取授权用户的电子邮件?我可以获得显示名称,但不能获得电子邮件地址。

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

提前致谢。

4

3 回答 3

1

将此网址添加到范围:

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

它加载姓名、公开资料网址、电子邮件、性别、照片等。

并在您获得授权后,从此 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"
    });

编辑

将范围添加到您的 AuthorizationState 构造函数

 List<string> scopes = new List<string>();                
 scopes.Add("https://www.googleapis.com/auth/userinfo.email");
于 2013-05-24T08:23:23.813 回答
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,但您可以使用任何其他库。

于 2013-10-26T06:01:10.263 回答
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();
于 2018-02-23T04:32:21.140 回答