首页 文章

Facebook C#SDK OAuth异常“需要ClientID”

提问于
浏览
0

我认为这个问题类似于to my previous one . 在.NET 4上使用最新的C#Facebook SDK我得到一个异常,消息"ClientID required",最后一行有以下代码:

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

已正确设置应用程序ID和密码 . 异常的堆栈跟踪如下: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身份验证 . 任何人都知道我做错了什么?在这几行代码中确实不会出现任何错误......

在此先感谢您的帮助!

Edit: FacebookWebContext的AccessToken属性抛出相同的错误,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运行程序(因为我正在开发应用程序),所以我无法对后一个异常做任何事情 . 实际上我也尝试过使用Webmatrix的IIS express,但问题仍然存在 . 同样有趣的是,在FacebookWebContext中,设置(app id,secret)也被正确设置,用户ID和签名请求也在那里......

Edit 2: 使用SDK源时也出现同样的错误 . 看起来AccessToken和Session of Expires属性会抛出异常 . 我不知道这是否与上面的httpcontext问题有关 .

2 回答

  • 2

    另一个解决方案是将facebook设置添加到您的web或app congfig

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

    之后创建Auth类

    var oauth = new FacebookOAuthClient(FacebookApplication.Current);
    

    它也会起作用

  • 0

    最后我设法解决了这个问题,但很可能这是SDK中的一个错误 .

    The cause 问题是FacebookApplication.Current是空的,因为它没有填充FacebookWebContext ctor中设置的数据 . 这导致访问令牌的问题:在第119行的FacebookSession.AccessToken中,FacebookOAuthClient通过FacebookApplication.Current实例化,当然这实际上是空的 . 因此,FacebookOAuthClient正在抛出异常,因为它没有获得应用程序设置 .

    The solution 解决方法是简单地将当前的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
    

相关问题