簡體   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