Выход из Facebook с помощью кнопки Link

Я просматривал довольно много сообщений в StackOverflow и в Интернете о возможности выхода пользователя из Facebook через ASP.NET LinkButton.

Я пробовал реализовать решения из следующих сообщений:

Код

Страница ASPX

<asp:LinkButton ID="LogoutButton" CssClass="log-out fb"  OnClick="LogoutButton_Click" runat="server">Logout</asp:LinkButton>

JavaScript

$(".log-out.fb").click(function () {
    FB.logout(function (response) {
        //Logged out
        FB.Auth.setAuthResponse(null, 'unknown');
    });
});

Вывод HTML

<a id="MainContent_LogoutButton" class="log-out fb" href="javascript:__doPostBack('ctl00$MainContent$LogoutButton','')" style="width: 66px; ">Logout</a>

Я точно знаю, что событие click jQuery запускается при отладке через Firebug. Код jQuery отлично работает при использовании в сочетании со стандартной привязкой HTML, поэтому нет причин не работать с ASP.NET LinkButton.

Любая помощь будет оценена.


person sbhomra    schedule 03.08.2012    source источник
comment
В HTML нет такой вещи, как «ASP.NET LinkButton». Пожалуйста, покажите нам фактический HTML-код, сгенерированный вашим серверным скриптом, или, что еще лучше, URL-адрес страницы-примера, чтобы просмотреть ее.   -  person CBroe    schedule 03.08.2012
comment
Я изменил свой пост, чтобы сказать ASPX вместо HTML. :-) Я отправлю HTML, сгенерированный .NET.   -  person sbhomra    schedule 03.08.2012
comment
Сообщение @CBroe обновлено. Посмотрев на вывод HTML, подсчитайте, что href = javascript: __ doPostBack ('ctl00 $ MainContent $ LogoutButton', '') вызывает проблему?   -  person sbhomra    schedule 03.08.2012
comment
Судя по названию, он делает некоторые вещи, например, отправляет обратно на сервер, так что да, это может быть проблемой. Если вы просто хотите иметь элемент HTML A, то почему бы вам просто не написать один из них в своем коде и вообще не забыть об этих кнопках asp ...?   -  person CBroe    schedule 03.08.2012
comment
@CBroe К сожалению, мне нужна кнопка ASP.NET, поскольку она выполняет некоторые функции на стороне сервера при нажатии кнопки. Я надеялся, что смогу не только вывести пользователя из системы по щелчку клиента, но и запустить код .NET.   -  person sbhomra    schedule 03.08.2012
comment
Вы можете просто вызвать свой код, который хотите выполнить на стороне сервера, в функции обратного вызова FB.logout, просто указав URL-адрес, который запускает этот код через location.href = "…"   -  person CBroe    schedule 03.08.2012


Ответы (1)


Спасибо за вашу помощь. Но мне удалось найти способ выйти из системы пользователя, перейдя по следующей ссылке:

https://www.facebook.com/logout.php?next=YOUR_URL&access_token=ACCESS_TOKEN

Я создал страницу обратного вызова, похожую на страницу из этого article. Как только я получил «токен доступа», мне удалось выйти из системы.

Вот мой код для моей страницы обратного вызова:

protected void Page_Load(object sender, EventArgs e)
{
    if (!String.IsNullOrEmpty(Request["code"]) && !Page.IsPostBack)
    {
        FacebookCallback();
    }
}

private void FacebookCallback()
{
    var client = new RestClient { Authority = "https://graph.facebook.com/oauth/" };
    var request = new RestRequest { Path = "access_token" };

    request.AddParameter("client_id", ConfigurationManager.AppSettings["facebook.appid"]);
    request.AddParameter("redirect_uri", ConfigurationManager.AppSettings["facebook.logout.callbackurl"]);
    request.AddParameter("client_secret", ConfigurationManager.AppSettings["facebook.appsecret"]);
    request.AddParameter("code", Request["code"]);

    RestResponse response = client.Request(request);
    // A little helper to parse the querystrings.
    StringDictionary result = QueryStringHelper.ParseQueryString(response.Content);

    string aToken = result["access_token"];

    LogUserOut(aToken);
}

private void LogUserOut(string sToken)
{
    string url = String.Format("https://www.facebook.com/logout.php?next=http://{0}/Default.aspx&access_token={1}", ConfigurationManager.AppSettings["site.url"], sToken);

    Response.Redirect(url);
}

Надеюсь, это поможет другим, если они столкнутся с той же проблемой.

person sbhomra    schedule 06.08.2012