Facebook C # SDK OAuth Исключение "Требуется идентификатор клиента" - PullRequest
0 голосов
/ 12 сентября 2011

Мне кажется, этот вопрос похож на мой предыдущий .Используя последний C # Facebook SDK в .NET 4, я получаю исключение с сообщением «Требуется идентификатор клиента» со следующим кодом в последней строке:

    var app = new DefaultFacebookApplication();
    app.AppId = "appId";
    app.AppSecret = "secret";
    var fb = new FacebookWebContext(app);
    fb.IsAuthenticated();

Идентификатор приложения и секретный код установлены правильно.Трассировка стека исключительной ситуации: System.Exception произошла

  Message=ClientID required.   Source=Facebook   StackTrace:
       at Facebook.FacebookOAuthClient.BuildExchangeCodeForAccessTokenParameters(IDictionary`2 parameters, String& name, String& path)
       at Facebook.FacebookOAuthClient.ExchangeCodeForAccessToken(String code, IDictionary`2 parameters)
       at Facebook.FacebookSession.get_AccessToken()
       at Facebook.FacebookSession.get_Expires()
       at Facebook.Web.FacebookWebContext.IsAuthenticated()
       at Piedone.FacebookTest.Authorize()   InnerException:

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

            FB.init({
                appId: appId,
                status: true, // check login status
                cookie: true, // enable cookies to allow the server to access the session
                xfbml: true, // parse XFBML
                oauth: true // enable OAuth 2.0
            });

Пользователинадлежащим образом регистрируется с помощью метода JS login (), поскольку запускается предупреждение в следующем фрагменте кода:

        FB.login(function (response) {
            if (response.authResponse) {
                alert("logged in");
            } else {
                alert('User cancelled login or did not fully authorize.');
            }
        }, { scope: scope });

В настройках приложения на Facebook как «Принудительное использование секретного имени входа для вызова OAuth, так идля auth.login "и" токен зашифрованного доступа "включены.Насколько я знаю, все это должно позволить использовать аутентификацию OAuth 2.У кого-нибудь есть идея, что я делаю не так?В этих нескольких строках кода действительно не может быть никаких ошибок ...

Заранее благодарен за любую помощь!

Редактировать: Свойство AccessToken FacebookWebContext вызываетта же самая ошибка и HttpContext.CurrentNotification делает:

CurrentNotification '(_facebookWebContextCache.HttpContext).CurrentNotification' threw an exception of type 'System.PlatformNotSupportedException'  System.Web.RequestNotification {System.PlatformNotSupportedException}
This operation requires IIS integrated pipeline mode.

Так как я должен запустить программу из Visual Studio с ее сервером разработки (как я в настоящее время разрабатываю приложение), с этим ничего нельзя поделатьпоследнее исключение, я полагаю.На самом деле я также пытался с IIS Express Webmatrix, но проблема сохраняется.Также интересно, что в FacebookWebContext также правильно установлены настройки (идентификатор приложения, секрет), идентификатор пользователя и подписанный запрос ...

Редактировать 2: Я также получаю ту же ошибку при использовании источника SDK.Похоже, что AccessToken и в свойстве Session свойство Expires выдают исключение.Я не знаю, связано ли это с проблемой httpcontext выше.

Ответы [ 2 ]

2 голосов
/ 14 января 2012

Еще одно решение - добавить настройки Facebook в ваш веб или приложение. Congfig

<facebookSettings appId="appid" appSecret="secret" />

, после этого создайте класс Auth

var oauth = new FacebookOAuthClient(FacebookApplication.Current);

И это также будет работать

0 голосов
/ 12 сентября 2011

Наконец мне удалось решить проблему, но, скорее всего, это ошибка в SDK.

Причина Проблема в том, что FacebookApplication.Current пуст, так как он не заполняется данными, установленными в ctor на FacebookWebContext. Это приводит к проблеме с маркером доступа: в FacebookSession.AccessToken на линии 119 создается экземпляр FacebookOAuthClient с помощью FacebookApplication.Current, который, конечно, практически пуст. Поэтому FacebookOAuthClient выдает исключение, так как не получает настройки приложения.

Решение Обходной путь - просто явно установить текущее приложение FacebookApplication вместе с созданием экземпляра FacebookWebContext:

var app = new DefaultFacebookApplication();
app.AppId = "appId";
app.AppSecret = "secret";
var fb = new FacebookWebContext(app);
FacebookApplication.SetApplication(app); // Note this is the new line
...