Facebook重新认证在一个弹出窗口

本文关键字:一个 窗口 认证 Facebook 新认证 | 更新日期: 2023-09-27 18:14:31

在facebook c# sdk的帮助下,我编写了一个windows窗体应用程序,它连接到facebook用户的个人资料,读取他的墙并在小部件中显示他的更新。

一切正常,除了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类facebookkoauthresult和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
        }
    }
}

我的意思是,当点击登录按钮时,会提示用户他的用户名和密码。

但是,系统只提示用户重新输入密码,而不提示用户重新输入用户名。

如果我使用没有"&auth_type=reauthenticate"参数的url,它不会提示任何东西,而是直接发送给我访问令牌。

我怎样才能强制facebook请求用户名?

Facebook重新认证在一个弹出窗口

经过几天的战斗,答案就在我的眼皮底下。

您只需要使用访问令牌调用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
        }
    }