繁体   English   中英

如何在ASP.NET MVC应用程序中附加自定义成员资格提供程序?

[英]How can I attach a custom membership provider in my ASP.NET MVC application?

如何将自定义成员资格提供程序与ASP.NET MVC [Authorize()]属性绑定? 我已经通过一些关于如何创建自定义成员资格提供程序的教程进行了大肆宣传,但是我发现的有关如何将其连接到应用程序的所有信息似乎都围绕着常规的ASP.NET WebForms应用程序,这些应用程序看起来像是一块蛋糕

我正在解决刚刚在ASP.NET MVC中发生的大量“魔术”,这很棒,但我习惯以WebForms的方式插入内容,因此这种“它只是工作”的方法有点像为我弯腰。 我怎么知道什么时候我应该做繁重的工作,或者我应该只依靠魔法发生的事情?

我在哪里将我的提供商绑定到MVC应用程序? 我是否正确地假设它是通过[Authorize()]属性调用的,一旦我把它连接起来?

希望我可以在其他答案上添加一些额外的清晰度,因为他们真的无法解释发生了什么事情,这无助于你的困惑。

首先,从你已经完成的事情的声音实现你的自定义提供程序,所以我只是抛出一些代码片段,这里不再详述任何细节:

using System.Web.Security;

public class MyCustomMembershipProvider : MembershipProvider
{
    public override bool ValidateUser(string username, string password)
    {
        if (username.Equals("BenAlabaster") && password.Equals("Elephant"))
            return true;

        return false;
    }

    /* Override all the other methods required to extend MembershipProvider */        
}

然后在web.config中配置提供程序,确保填充配置基本MembershipProvider的属性:

<membership defaultProvider="MyCustomMembershipProvider">      
    <providers>        
        <clear />        
        <add name="MyCustomMembershipProvider" 
             type="MyNamespace.MyCustomMembershipProvider" 
             enablePasswordRetrieval="false"
             enablePasswordReset="true"          
             requiresQuestionAndAnswer="false"          
             requiresUniqueEmail="true"           
             passwordFormat="Hashed"           
             maxInvalidPasswordAttempts="10"           
             minRequiredPasswordLength="6"           
             minRequiredNonalphanumericCharacters="0"           
             passwordAttemptWindow="10"           
             passwordStrengthRegularExpression=""           
             applicationName="/" />      
    </providers>     
</membership>

下一点,我认为你是过度思考,实际上是你的web应用程序的搭配。 而在WebForms应用程序中,您必须自己编写其余的代码 - MVC框架为您完成剩下的工作 - 您需要做的就是在您的操作方法中添加[Authorize]属性,框架将检查您是否'重新登录,如果没有重定向到登录页面。 登录页面将找到您的自定义提供程序,因为这是在web.config中配置的并将登录您的用户。您可以通过引用User对象从控制器访问有关登录用户的信息:

public class WhateverController : Controller
{
    [Authorize]
    public ActionResult WhateverAction()
    {
        ViewData["LoggedInAs"] = string.Format("You are logged in as {0}.", User.Identity.Name);
        Return View();
    }
}

因此,此操作要求用户登录并将用户信息显示到要在页面上显示的Whatever / WhateverAction.aspx视图。

我的自定义成员资格提供程序在web.config中引用:

 <membership defaultProvider="MyMembershipProvider">
  <providers>
    <clear/>
    <add name="MyMembershipProvider" type="Namespace.MyMembershipProvider, Namespace" connectionStringName="connstring" [...] />
  </providers>
</membership>

然后只使用静态Membership类。

你在这个自定义会员中改变了多少? 就像你改变表名一样? 你能记录用户和东西吗? 即你的自定义会员资格?

如果你改变了很多东西,比如你将角色表名改为不同的东西或类似的东西,那么你将不得不覆盖Authroize标签。

但是,如果您的自定义成员身份不起作用,那么您可能没有正确配置它,并且配置与webforms中的配置相同。 你只需要设置你的webconfig。

  </authentication>
    <membership>
      <providers>
        <clear />
        <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="ConnectionString"
         enablePasswordRetrieval="false"
         enablePasswordReset="true"
          requiresQuestionAndAnswer="false"
          requiresUniqueEmail="true"
           passwordFormat="Hashed"
           maxInvalidPasswordAttempts="10"
           minRequiredPasswordLength="6"
           minRequiredNonalphanumericCharacters="0"
           passwordAttemptWindow="10"
           passwordStrengthRegularExpression=""
           applicationName="/"  />
      </providers>
    </membership>
    <profile>
      <providers>
        <clear />
        <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="ConnectionString" applicationName="/" />
      </providers>
    </profile>
    <roleManager enabled="true">
      <providers>
        <clear />
        <add connectionStringName="ConnectionString"
          applicationName="/" name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
        <add applicationName="/" name="AspNetWindowsTokenRoleProvider"
          type="System.Web.Security.WindowsTokenRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
      </providers>
    </roleManager>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM