2

私は、facebook のユーザーのプロファイルに接続し、彼の壁を読み取り、facebook c# sdk の助けを借りてウィジェットで更新を表示する Windows フォーム アプリケーションを作成します。

Facebookがユーザーの資格情報を変更できないという事実を除いて、すべてが正常に機能します。つまり、別のユーザーとして再ログインすることを意味します。

私の認証フローは概略次のとおりです。

ログインプロセス初期化子:

注: ダイアログはポップアップで表示されます。フルブラウザでダイアログを表示するとログアウトできますが、ポップアップではこの機能が不足しているようです。

private void loginButton_Click(object sender, EventArgs e){     
    browser = new WebBrowser();
    this.browser.Navigated += new WebBrowserNavigatedEventHandler(browser_Navigated);
    //+ all types of gui settings for the borwser
    form.Controls.Add(browser);

    Uri url=new Uri("https://www.facebook.com/dialog/oauth?client_id=" + {*MyAppsId*}+
      "&redirect_uri=" + "https://www.facebook.com/connect/login_success.html" +
      "&response_type=token"+
      "&auth_type=reauthenticate"+
      "&display=popup"+
      "&scope=read_stream"

    browser.Navigate(url);// +try/catches - omitted
}

ナビゲーション応答の解析:

注: c# sdk クラス FacebookOAuthResult および FacebookClient を使用して応答を解析するだけです

private void browser_Navigated(object sender, WebBrowserNavigatedEventArgs e){
    FacebookOAuthResult oauthResult; //helps to streamline parsing
    if (fb.TryParseOAuthCallbackUrl(e.Url, out oauthResult)){ //type of fb is FacebookClient of c# sdk
        if (oauthResult.IsSuccess){
            accessToken = oauthResult.AccessToken;
            //from here start reaing user's feed with the help of access token
        }
    }
}

私が意図したことは、ログインボタンをクリックすると、ユーザーにユーザー名とパスワードの入力を求めるプロンプトが表示されることです

ただし、ユーザーはパスワードの再入力のみを求められ、ユーザー名の再入力は求められません。

パラメータなしで url を使用すると、"&auth_type=reauthenticate"プロンプトは表示されず、直接アクセス トークンが送信されます。

Facebookにユーザー名を要求させるにはどうすればよいですか?

4

1 に答える 1

0

何日も戦った後、答えは私の目の前にありました。

https://www.facebook.com/logout.phpアクセス トークンを使用して呼び出すだけです。

        WebBrowser browser = new WebBrowser();
        browser.Navigated += browser_NavigatedLogout;

        string logoutUrl = "https://www.facebook.com/logout.php?" +
            "next=https://www.facebook.com/connect/login_success.html" +
            "&access_token=" + MyAccessToken;


        try
        {
            browser.Navigate(new Uri(logoutUrl));
        }
        catch (System.Exception other)
        {
            MessageBox.Show("error logging out: "+other.Message);
        }

ハンドラは次のとおりです。

    private void browser_NavigatedLogout(object sender, WebBrowserNavigatedEventArgs e)
    {
        if (e.Url.AbsoluteUri == "https://www.facebook.com/connect/login_success.html")
        {
           //here anything you need to do after the user logged off
        }
    }
于 2013-05-20T20:20:16.320 に答える