通过本地开发网站的Facebook进行身份验证

本文关键字:Facebook 身份验证 网站 开发网 开发 | 更新日期: 2023-09-27 18:24:48

我正在尝试添加从我正在开发的网站发布到用户墙上的功能。

我已经使用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应用程序设置为:

  • 应用程序域:Domain.lom
  • 网站URL:http://subdomain.domain.lom/

我觉得你在当地工作没关系?

通过本地开发网站的Facebook进行身份验证

沙盒模式

我建议创建第二个Facebook应用程序(就Facebook应用程序id而言),以便在沙箱模式下进行开发和测试。

有了测试应用程序,你可以在对其他人隐藏的有限数量的用户上使用相同的代码和不同的设置(真的很有用)。

以下是一些链接:

  1. Facebook文档中的应用程序安全性
  2. 在测试期间,你如何将Facebook应用程序限制在少数人范围内?来自stackoverflow.com

可能的错误

尝试对returnUrl值进行编码。

如果它不起作用,你必须调试它:(.我的第一位客人是Facebook授权你访问另一个域。

要想让IE在没有无限重定向循环的情况下工作,还需要从web服务器上查看p3p策略。

请在web.config中查看p3p标头。如果它不在那里,那么你可以添加一个来让IE高兴。

请参阅http://www.hanselman.com/blog/TheImportanceOfP3PAndACompactPrivacyPolicy.aspx