【问题标题】:Authorization is broken after migrating to ASP.NET MVC 4迁移到 ASP.NET MVC 4 后授权中断
【发布时间】:2013-01-15 01:26:08
【问题描述】:

我从 MVC 2 迁移到 MVC 4。我使用 Facebook Javascript API 进行身份验证,因此用户通过 Facebook 登录,我只获得了他们的 Facebook ID。如果他们的 Facebook 登录尝试成功,在 MVC 2 中,我只是将他们登录到我的站点,以便他们可以访问具有 [Authorize] 属性的方法:

FormsService.SignIn(user.UserName, true);

现在迁移到 MVC 4 后,我的 Facebook 登录过程仍然可以正常工作,但即使在执行 FormsService.SignIn 之后,用户似乎也没有通过身份验证。 HttpContext.User.identity.IsAuthenticated 为假。因此,他们无法访问具有 [Authorize] 属性的方法。

我的 MVC 4 web.config 如下所示:

<profile defaultProvider="DefaultProfileProvider">
  <providers>
    <add name="DefaultProfileProvider" type="System.Web.Providers.DefaultProfileProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />
  </providers>
</profile>
<membership defaultProvider="UserMembershipProvider">
  <providers>
    <!--<add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />-->
    <add name="**UserMembershipProvider**" type="MyProject.Models.UserMembershipProvider" applicationName="/" />
  </providers>
</membership>
<roleManager defaultProvider="DefaultRoleProvider">
  <providers>
    <add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />
  </providers>
</roleManager>
<sessionState mode="InProc" customProvider="DefaultSessionProvider">
  <providers>
    <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" />
  </providers>
</sessionState>

如您所见,我在 MVC 2 中使用了一个名为“UserMembershipProvider”的自定义成员资格提供程序(尽管在我转移到 Facebook 身份验证后它并没有真正使用),我将相同的东西复制到 MVC 4。

我错过了什么?

谢谢。

【问题讨论】:

    标签: asp.net .net asp.net-mvc asp.net-mvc-2 asp.net-mvc-4


    【解决方案1】:

    当您升级 web.config 中的表单身份验证部分时,是否有可能被删除/更新?

    【讨论】:

    • 哦,等等,我认为你是对的,我在 MVC 4 配置中没有看到 Forms Auth 部分。
    • 是的,就是这样...添加了该部分,并且身份验证似乎再次起作用。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多