2015-10-06 58 views
2

回到我試圖通過一個的Facebook登錄頁面訪問用戶的信息在我的WinForm應用。即使我要求用戶在email擴展權限,我得到後提交的名稱和編號。用戶電子郵件沒有通過Facebook登錄

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的圖形API瀏覽器用戶的電子郵件,它返回調試消息: enter image description here

顯然,我的程序不要求使用用戶的電子郵件的權限。因爲在我提交我的登錄信息後立即顯示帶有「成功」文本的白頁,並且沒有返回任何電子郵件值。

我怎樣才能改變我的登錄頁面,要求用戶的電子郵件?

回答

7

嘗試

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

謝謝!現在工作。 – Disasterkid

+0

令人驚歎;感謝Tobi!今天早上我一直在用這個甩掉我的頭! –

相關問題