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

Bob*_*der 5 .net c# asp.net-mvc asp.net-membership

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

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

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

Ben*_*ter 6

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

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

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 */        
}
Run Code Online (Sandbox Code Playgroud)

然后在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>
Run Code Online (Sandbox Code Playgroud)

下一点,我认为你是过度思考,实际上是你的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();
    }
}
Run Code Online (Sandbox Code Playgroud)

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