使用MongoDB重用MVC4登录

时间:2013-03-30 16:20:57

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

我创建了一个MVC 4站点并想重用登录,但我不想使用SQL,我想使用MongoDB,所以使用本指南http://www.danharman.net/2011/06/23/asp-net-mvc-3-custom-membership-provider-with-repository-injection/

我制作了一个新的成员提供者https://github.com/Mech0z/GoldSilverEarnings/blob/master/GoldSilverWebServer/Authentication/MongoDB/MongoMembershipProvider.cs

and roleprovider https://github.com/Mech0z/GoldSilverEarnings/blob/master/GoldSilverWebServer/Authentication/MongoDB/MongoRoleProvider.cs

然后我有了这个Web.config

<?xml version="1.0" encoding="utf-8"?>

<configuration>
<configSections>
</configSections>
<connectionStrings>
<add name="MongoConnection" connectionString="mongodb://censored" />
</connectionStrings>
<appSettings>
<add key="enableSimpleMembership" value="false"/>
<add key="autoFormsAuthentication" value="false"/>
<add key="webpages:Version" value="2.0.0.0" />
<add key="webpages:Enabled" value="false" />
<add key="PreserveLoginUrl" value="true" />
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
<system.web>
<membership defaultProvider="AccountMembershipProvider">
  <providers>
    <add name="AccountMembershipProvider"
         type="GoldSilverWebServer.Authentication.MongoDB.MongoMembershipProvider" />
  </providers>
</membership>

<roleManager enabled="true" defaultProvider="AccountRoleProvider">
  <providers>
    <clear/>
    <add name="AccountRoleProvider"
         type="GoldSilverWebServer.Authentication.MongoDB.MongoRoleProvider" />
  </providers>
</roleManager>

<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
<authentication mode="Forms">
  <forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
<pages>
  <namespaces>
    <add namespace="System.Web.Helpers" />
    <add namespace="System.Web.Mvc" />
    <add namespace="System.Web.Mvc.Ajax" />
    <add namespace="System.Web.Mvc.Html" />
    <add namespace="System.Web.Optimization" />
    <add namespace="System.Web.Routing" />
    <add namespace="System.Web.WebPages" />
  </namespaces>
</pages>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<handlers>
  <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
  <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
  <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
  <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
  <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
  <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="MongoDBSettings.Driver" publicKeyToken="f686731cfb9cc103" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-1.8.0.124" newVersion="1.8.0.124" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="MongoDBSettings.Bson" publicKeyToken="f686731cfb9cc103" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-1.8.0.124" newVersion="1.8.0.124" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="MongoDB.Driver" publicKeyToken="f686731cfb9cc103" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-1.8.0.124" newVersion="1.8.0.124" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="MongoDB.Bson" publicKeyToken="f686731cfb9cc103" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-1.8.0.124" newVersion="1.8.0.124" />
  </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

点击“登录”enter image description here时出现此错误(右键单击并复制图片网址以查看完整尺寸)

是否无法像这样重复使用登录系统?

2 个答案:

答案 0 :(得分:1)

您将MongoMembershipProvider更改为继承自ExtendedMembershipProvider

public class MongoMembershipProvider : ExtendedMembershipProvider

答案 1 :(得分:1)

尝试以下代码而不是websecurity.Login

if (Membership.ValidateUser(model.UserName, model.Password))