如何让WebSecurity.Login工作?

时间:2013-12-29 05:50:29

标签: asp.net-mvc-4

我正在尝试获取MVC4工作的默认登录模型,但开箱即用,我认为我做得不对。这是默认代码:

if (WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))
{
    return RedirectToLocal(returnUrl);
}

当我构建,运行并尝试登录时,我收到以下错误:

An exception of type 'System.InvalidOperationException' occurred in WebMatrix.WebData.dll but was not handled in user code

Additional information: To call this method, the "Membership.Provider" property must be an instance of "ExtendedMembershipProvider".

我认为这是我的提供商资源的问题,但我已经安装了Entity First Tools 6.0.2,System.web.providers和Microsoft.aspnet.providers.core,我仍然遇到此问题。我发现了一些迹象,可能是因为我正在连接到SQL数据库,但我找不到解决方案。

有人表示我需要使用System.Web.Http而不是System.Web.Mvc,但那不是它。

这是我的连接字符串:

<add name="DefaultConnection" providerName="System.Data.SqlClient" connectionString="Server=servername;Initial Catalog=mercury;Integrated Security=SSPI" />

这是我的个人资料和会员信息:

<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="DefaultMembershipProvider">
  <providers>
    <add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=2.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="/" />
  </providers>
</membership>

我读了一些其他东西,表明我需要初始化我的SimpleMembershipProvier,但我有一个自定义初始化程序,可以从application_start运行,所以我是一个种子数据库,包含数据:

Database.SetInitializer<UsersContext>(new DatabaseInitializer());
new UsersContext().UserProfiles.Find(1);

我的数据初始化程序有此代码来初始化我的数据库:

private void SeedMembership()
    {
        WebSecurity.InitializeDatabaseConnection("UsersContext", "UserProfile", "UserId", "UserName", autoCreateTables: true);
    }

所以,我不知道下一步该在哪里看。

1 个答案:

答案 0 :(得分:1)

有些地方可能出现问题。对于初学者,我将实体6降级为实体5,因为EF 6支持使用声明身份模型而不是简单成员资格API的MVC。您可以转到包管理器控制台并选择相关的应用程序

Uninstall-Package EntityFramework Version 6.0.2 

然后

Install-Package EntityFramework version 5.0.0

希望这能让你前进。 您也可以使用检查方法

包装初始化程序
if(!Websecurity.Initialized){

///Initialize Websecurity
}