从本地开发站点使用Facebook进行身份验证

时间:2012-02-14 16:26:20

标签: c# facebook facebook-c#-sdk

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

我使用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应用设置是:

我的印象是,如果你在当地工作并不重要吗?

2 个答案:

答案 0 :(得分:1)

沙盒模式

我建议创建第二个Facebook应用程序(就Facebook应用程序ID而言),以便在沙盒模式转换的情况下进行开发和测试。

使用测试应用程序,您可以使用与其他人隐藏的有限数量用户不同设置的相同代码(非常有用)。

以下是一些链接:

    来自Facebook文档的
  1. Application Security
  2. 来自stackoverflow.com的
  3. How do you limit a Facebook app to a small number of people during testing?
  4. 可能的错误

    尝试编码returnUrl值。

    它不起作用你必须调试它:(。我的第一位客人是Facebook授权你进入另一个域名。

答案 1 :(得分:0)

要查看的其他内容将是IE在没有无限重定向循环的情况下工作,它需要从您的Web服务器查看p3p策略。

在web.config中检查p3p标头。如果它不在那里,那么你可以添加一个让IE开心。

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