首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >弹出窗口中的Facebook重新身份验证

弹出窗口中的Facebook重新身份验证
EN

Stack Overflow用户
提问于 2013-05-19 14:19:43
回答 1查看 896关注 0票数 2

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

一切都很好,除了facebook不允许我的用户更改他的凭证,这意味着重新登录作为一个不同的用户。

我的身份验证流程大致如下:

在登录过程中,初始化程序:

注意:对话框显示在弹出窗口中。如果您在完整浏览器中显示对话框,则可以注销,但在弹出中似乎缺少此功能。

代码语言:javascript
运行
复制
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解析响应

代码语言:javascript
运行
复制
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询问用户名呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-20 20:20:16

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

只需使用访问令牌调用https://www.facebook.com/logout.php

代码语言:javascript
运行
复制
        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);
        }

处理程序是:

代码语言:javascript
运行
复制
    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
        }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16635643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档