0

问题已解决,见下文

我正在做的是这样的:

生成随机数 -> 将其存储在会话中 -> 使用 Facebook 的 OAuth 服务的“状态”参数将其传递给 facebook -> 验证返回的状态是否与我的会话中的状态相同(这样做是为了保护 CSRF) .

这总是有效的,没问题。但不知何故,它不再工作了(会话似乎是空的,因为当我尝试阅读它时我得到了 NullReferenceException)。我可能改变了一些东西,但我不知道是什么。

我尝试在facebook返回状态的代码部分设置断点,但不知何故它永远不会到达断点......我的断点之间的代码被执行,但我的断点没有被命中。

这是执行一切的代码:

public ActionResult SignUpButton()
{
    int random = RandomHelpers.GetRandomInteger(null);
    Session.Add("facebookState", random.ToString(CultureInfo.InvariantCulture));

    ViewBag.Uri = "https://www.facebook.com/dialog/oauth?" +
        "client_id=" + _facebookAuthenticationService.GetAppId() + 
        "&redirect_uri=" + _facebookAuthenticationService.GetReturnUri() + 
        "&scope=email" +
        "&state=" + random;

    return PartialView();
}

public ActionResult Register()
{
    string error = Request.QueryString["error"];
    string state = Request.QueryString["state"];
    string originalState = Session["facebookState"].ToString();

(为简洁起见,我删除了其余部分)。SignUpButton 函数返回一个局部视图,其中包含一个带有指向 facebook 的注册 URL 的按钮。Facebook 返回 localhost:xxx/Account/Register(即 Register 函数),该函数被命中(尽管 Register 中的断点不做任何事情),并且在 Session["facebookState"].ToString( ) 部分。

这是我在 web.config 中与会话相关的设置的样子:

<sessionState mode="InProc">
  <providers>
    <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
  </providers>
</sessionState>

我就是想不通。我已经重写了代码,使其不再产生错误并从 facebook graph API 返回数据,但是我不能调试这部分代码是不可接受的(记录:SingUpButton 方法中的断点命中) .

我希望任何人都可以帮助我。提前致谢!

4

1 回答 1

1

哦,上帝,那太愚蠢了。发布此消息后(在寻找解决方案 2 小时后),我发现了问题所在:

Visual Studio 更改了运行我的应用程序的端口。我将其设置为固定端口(右键单击 MVC 项目 -> 网络 -> 特定端口),现在它工作正常。

我现在觉得很傻...

于 2012-05-08T21:30:56.950 回答