我认为这个问题类似于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 回答
另一个解决方案是将facebook设置添加到您的web或app congfig
之后创建Auth类
它也会起作用
最后我设法解决了这个问题,但很可能这是SDK中的一个错误 .
The cause 问题是FacebookApplication.Current是空的,因为它没有填充FacebookWebContext ctor中设置的数据 . 这导致访问令牌的问题:在第119行的FacebookSession.AccessToken中,FacebookOAuthClient通过FacebookApplication.Current实例化,当然这实际上是空的 . 因此,FacebookOAuthClient正在抛出异常,因为它没有获得应用程序设置 .
The solution 解决方法是简单地将当前的FacebookApplication与FacebookWebContext的实例化一起显式设置: