迁移到ASP.NET MVC 4后,授权被破坏

时间:2013-01-31 02:20:30

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

我从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为false。因此,他们无法使用[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中。

我错过了什么?

感谢。

1 个答案:

答案 0 :(得分:2)

当你在web.config中升级表单auth部分时,是否有机会删除/更新?