我一直在开发一个使用Facebook添加的应用程序,以使Facebook用户能够登录,并且应用程序可以访问个人资料图片等详细信息。
昨天该应用程序运行正常,我的开发工作正常进行。
今天早上我尝试登录以查看我已经走了多远,并遇到了Access Token错误消息。
单个部分视图会加载好,但整个网站不会。在进一步调查中,我发现登录屏幕分配了一个新的访问令牌,但是当网站试图调出母版页时,令牌为空。
我的登录信息如下: -
<html>
<head>
<title>Log On</title>
</head>
<body>
<div id="fb-root"></div>
<script type="text/javascript">
window.fbAsyncInit = function() {
FB.init({
appId : '***app no***',
status : true,
cookie : true,
xfbml : true,
oauth : true
});
FB.Event.subscribe('auth.login', function () {
window.location.reload();
});
};
(function(d){
var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "//connect.facebook.net/en_US/all.js";
d.getElementsByTagName('head')[0].appendChild(js);
}(document));
</script>
<div class="fb-login-button" data-scope="email">
Login with Facebook
</div>
</body>
</html>
这让我大吃一惊。
返回的错误是(OAuthException)必须使用活动访问令牌来查询有关当前用户的信息。
希望这足以让某人找到解决方案。
非常感谢
答案 0 :(得分:0)
您尚未设置频道网址,即您的网站路径(可以是localhost或服务器域)
<script type="text/javascript">
window.fbAsyncInit = function() {
FB.init({
appId : '***app no***',
channelUrl : '//WWW.YOUR_DOMAIN.COM/channel.html', // Channel File for x-domain communication
status : true,
cookie : true,
xfbml : true,
oauth : true
});
此外,您必须在developer.facebook.com中设置您的网址路径,从那里获得您的app-id .....
答案 1 :(得分:0)
好的,发现一些信息表明在12月初对Facebook SDK进行的更改将导致我的问题。根据给出的建议,我在项目中的Facebook引用上运行了参考更新。这已从Web.config中删除了facebookSettings行,现在警告框中出现以下错误消息六次。
对'Facebook.IFacebookApplication'类型的引用声称已定义 在'\ packages \ Facebook.6.1.4 \ lib \ net40-client \ Facebook.dll'中,但它 不可能 找到\ packages \ FacebookWeb.5.4.1.0 \ lib \ net40 \ Facebook.Web.dll
并且在尝试运行程序时产生以下错误
异常详细信息:System.TypeLoadException:无法加载类型 来自汇编'Facebook的'Facebook.FacebookApplication', Version = 6.0.10.0,Culture = neutral,PublicKeyToken = 58cb4f2111d1e6de'。
Source Error: Line 12: public class HomeController : Controller Line 13: { Line 14: FacebookWebContext FBWebContext = new FacebookWebContext(); Line 15: FacebookWebClient FBWebClient = new FacebookWebClient(); Line 16:
答案 2 :(得分:0)
我知道这有点旧,但这可能有助于其他人。最后找到了答案。在控制器中我需要以下内容: -
var client = new FacebookClient(Session["FacebookToken"].ToString());
dynamic me = client.Get("me");
这有一个活动的令牌,允许我再次访问该信息。