Facebook c# SDK OAuth异常“需要ClientID”
本文关键字:需要 ClientID 异常 SDK OAuth Facebook | 更新日期: 2023-09-27 18:08:10
我认为这个问题与我之前的问题相似。使用。net 4上最新的c# Facebook SDK,我得到一个异常,消息"ClientID required",最后一行有以下代码:
var app = new DefaultFacebookApplication();
app.AppId = "appId";
app.AppSecret = "secret";
var fb = new FacebookWebContext(app);
fb.IsAuthenticated();
App ID和secret设置正确。异常的堆栈跟踪如下:系统。异常发生
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的登录秘密"。开启"登入密码"及"加密登入令牌"。据我所知,所有这些都应该启用OAuth 2身份验证。有人知道我哪里做错了吗?在这几行代码中真的不可能有任何错误…
提前感谢您的帮助!
编辑: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和签名请求也在那里…
编辑2:在使用SDK源代码时,我也会得到相同的错误。看起来AccessToken和Session中的Expires属性抛出了异常。我不知道这是否与上面的httpcontext问题有关。
另一个解决方案是将facebook设置添加到您的web或应用程序配置
<facebookSettings appId="appid" appSecret="secret" />
之后创建Auth类
var oauth = new FacebookOAuthClient(FacebookApplication.Current);
同样可以
最后我设法解决了这个问题,但这很可能是SDK中的错误。
问题是facebook的应用程序。Current是空的,因为它没有在FacebookWebContext函数中填充数据集。这导致了访问令牌的问题:在FacebookSession。第119行上的AccessToken facebookkoauthclient用FacebookApplication实例化。目前,那当然实际上是空的。所以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