c# - Facebook 登录未返回用户电子邮件

标签 c# facebook winforms facebook-graph-api

<分区>

我正尝试通过我的 WinForm 应用程序中的 Facebook 登录页面 访问用户信息。即使我在扩展权限中请求用户的电子邮件,提交后我得到的只是名称和 ID。

public partial class Form1 : Form
{
    private const string AppId = "MY_APP_ID_IS_HERE";
    private Uri loginUrl;
    private const string extendedPermissions = "public_profile,user_friends,email";
    FacebookClient fbClient = new FacebookClient();
    private string _accessToken;
    private bool _authorized;
    private string _currentName;
    private string _currentEmail;
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        Login();
    }

    private void Login()
    {
        dynamic parameters = new ExpandoObject();
        parameters.client_id = AppId;
        parameters.redirect_uri = "https://www.facebook.com/connect/login_success.html";
        parameters.response_type = "token";
        parameters.display = "popup";
        if (!string.IsNullOrWhiteSpace(extendedPermissions))
            parameters.scope = extendedPermissions;
        var fb = new FacebookClient();
        loginUrl = fb.GetLoginUrl(parameters);
        webBrowser1.Navigate(loginUrl.AbsoluteUri);
    }

    private void webBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e)
    {
        if (webBrowser1.Visible)
        {
            var fb = new FacebookClient();
            FacebookOAuthResult oauthResult;
            if (fb.TryParseOAuthCallbackUrl(e.Url, out oauthResult))
            {
                if (oauthResult.IsSuccess)
                {
                    _accessToken = oauthResult.AccessToken;
                    _authorized = true;
                }
                else
                {
                    _accessToken = "";
                    _authorized = false;
                }
                if (_authorized)
                {
                    fb = new FacebookClient(_accessToken);
                    dynamic result = fb.Get("me");
                    _currentName = result.name;
                    _currentEmail = result.email;
                    lblLoggedInUser.Text = string.Format("Facebook User: {0}", _currentName);
                    lblPassword.Text = string.Format("Email: {0}", _currentEmail);
                    //Do what need being done now that we are logged in!
                }
                else
                {
                    MessageBox.Show("Couldn't log into Facebook!", "Login unsuccessful", MessageBoxButtons.OK,
                                    MessageBoxIcon.Error);
                }
            }
        }
    }

}

当我运行查询并使用 Facebook Graph API Explorer 询问用户的电子邮件时,它返回此调试消息: enter image description here

显然我的程序没有请求使用用户电子邮件的权限。因为在我提交登录后立即显示一个带有文本“成功”的白页,并且没有返回任何电子邮件值。

如何更改我的登录页面以询问用户的电子邮件地址?

最佳答案

尝试

dynamic result = fb.Get("me?fields=id,name,email");

关于c# - Facebook 登录未返回用户电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32965048/

相关文章:

c# - 如何在多个线程之间进行通信?

android - 适用于 iOS 和 Android 的更新 (2013) Facebook URI 方案是什么

android - 使用发布 key 的 Android 应用程序的 Facebook 登录

c# - 应用程序配置无效 - 应用程序无法启动

c# - 无法反序列化当前的 JSON 数组

ios - 用户对 facebook 进行身份验证后,未调用应用程序打开 Url 方法

c# 获取TreeView父节点列表

c# - XNA 和 WinForms

c# - Datagridview 组合框单元不会设置为 readonly = false

c# - 与 C++ 结构等效(或更好)的 C# 结构