Получить AccessToken на целевой странице с помощью Facebook C # SDK - PullRequest
3 голосов
/ 08 марта 2011

Платформа кодирования ASP.NET 4.0 WebForms

У меня есть две страницы, которые имеют отношение здесь

  1. Login.aspx
  2. LandingPage.aspx

На Login.aspx, когда я нажимаю кнопку ImageButton, я перенаправляю на сайт Facebook со следующим кодом

protected void FacebookLoginButton_Click(object sender, ImageClickEventArgs e)
{
    try
    {
        Response.Redirect(GetFacebookLoginURL());
    }
    catch (System.Threading.ThreadAbortException)
    {
        throw;
    }
    catch (Exception err)
    {
        Elmah.ErrorSignal.FromCurrentContext().Raise(err);
    }
}

private string GetFacebookLoginURL()
{
    try
    {
        string baseURL = System.Configuration
            .ConfigurationManager
            .AppSettings["WebsiteURL"]
            .ToString();

        string[] extendedPermissions = new[] { 
            "publish_stream", 
            "offline_access" 
        };

        var oauth = new FacebookOAuthClient { 
            ClientId = FacebookContext.Current.AppId 
        };

        var parameters = new Dictionary<string, object>{
            { "response_type", "token" },
            { "display", "page" }
        };

        if (extendedPermissions != null && extendedPermissions.Length > 0)
        {
            var scope = new StringBuilder();
            scope.Append(string.Join(",", extendedPermissions));

            parameters["scope"] = scope.ToString();
        }
        parameters["redirect_uri"] = String.Format("{0}LandingPage.aspx", baseURL);
        return oauth.GetLoginUrl(parameters).OriginalString;
    }
    catch (Exception err)
    {
        Elmah.ErrorSignal.FromCurrentContext().Raise(err);
        return "";
    }
}

Эта часть работает правильно. Но я не знаю, как получить доступ к пользовательской информации на LandingPage, которая является моим redirect_uri. Попробовал это.

    FacebookOAuthClient cl = new FacebookOAuthClient(FacebookContext.Current);
    FacebookOAuthResult result = null; 
    string url = Request.Url.AbsoluteUri;

    // verify that there is a code in the url
    if (FacebookOAuthResult.TryParse(url, out result))
    {
        if (result.IsSuccess)                               
        {
            var accesstoken = result.AccessToken;
        }
        else
        {
            var errorDescription = result.ErrorDescription;
            var errorReason = result.ErrorReason;
        }
    }

Но я сомневаюсь, что это не будет работать, так как у меня нет window.hash.location на стороне сервера (все равно не работает)

    var client = new FacebookClient(FacebookContext.Current);
    dynamic me = client.Get("me");
    string firstName = me.first_name;
    string lastName = me.last_name;
    string email = me.email;

Хотя я не уверен, что получение токена доступа решит мою проблему, не так ли? Это ошибка, которую я получаю.

(OAuthException) Активный доступ токен должен использоваться для запроса информация о текущем пользователе.

Что я делаю не так?

Ответы [ 3 ]

1 голос
/ 09 марта 2011

Вот пример автономного веб-сайта с использованием веб-форм. Проверьте Default.aspx.cs и Web.config . Обратите внимание, что этот образец может быть изменен для использования с последним исходным кодом и может не работать с последним выпуском (5.0.3 бета).

0 голосов
/ 14 марта 2011

Это должно быть просто, но я не понимаю. Поэтому я использовал менее используемый Facebook C # SDK от Facebook . Я в значительной степени сделал то, что предложил этот блог . Теперь все хорошо.

0 голосов
/ 09 марта 2011

Я только недавно сделал эту реализацию. Чтобы получить доступ ко мне, вам нужен токен доступа.

Реализация довольно проста, однако, я скажу, что я обнаружил, что основным камнем преткновения для меня было убедиться, что мой redirect_uri из моего URL "Login.aspx" соответствует redirect_uri с моей целевой страницы.

...