我正在尝试添加从我正在开发的网站发布到用户墙的功能。
我使用Microsoft C#Facebook SDK获得了一些代码。它会检查当前用户是否已通过身份验证,如果没有,则会重定向到OAuth页面。如果用户通过身份验证,则会尝试发布到他们的墙上:
CanvasAuthorizer auth = new CanvasAuthorizer();
bool authorized = auth.FacebookWebRequest.IsAuthorized(new string[] { "publish_stream" });
if (authorized)
{
FacebookClient client = new FacebookClient();
client.AccessToken = auth.FacebookWebRequest.AccessToken;
Dictionary<string, object> args = new Dictionary<string, object>();
args["message"] = "This is a test.";
args["name"] = "";
args["link"] = "http://subdomain.domain.lom/";
args["description"] = "Development site.";
client.Post("/me/feed", args);
}
else
{
long appId = {APP_ID};
string returnUrl = "http://subdomain.domain.com/share";
Response.Redirect("https://www.facebook.com/dialog/oauth?client_id=" + appId.ToString() + "&redirect_uri=" + returnUrl + "&scope=publish_stream");
}
首次加载时,它会看到您未经过身份验证,并将您重定向到Facebook身份验证页面。
但是,当它尝试返回我的网站时,它会进入重定向循环。
看起来正在发生的事情是,当它从Facebook返回时,它会进行身份验证检查,但它表示用户未经过身份验证。然后再次重定向到Facebook登录,知道用户已经过身份验证,因此返回我的站点,导致循环。
我正在我的本地计算机上开发http://subdomain.domain.lom/,这是外部世界无法访问的。
我的Facebook应用设置是:
我的印象是,如果你在当地工作并不重要吗?
答案 0 :(得分:1)
我建议创建第二个Facebook应用程序(就Facebook应用程序ID而言),以便在沙盒模式转换的情况下进行开发和测试。
使用测试应用程序,您可以使用与其他人隐藏的有限数量用户不同设置的相同代码(非常有用)。
以下是一些链接:
尝试编码returnUrl
值。
它不起作用你必须调试它:(。我的第一位客人是Facebook授权你进入另一个域名。
答案 1 :(得分:0)
要查看的其他内容将是IE在没有无限重定向循环的情况下工作,它需要从您的Web服务器查看p3p策略。
在web.config中检查p3p标头。如果它不在那里,那么你可以添加一个让IE开心。
请参阅http://www.hanselman.com/blog/TheImportanceOfP3PAndACompactPrivacyPolicy.aspx