首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

ASP.NET Membership API 完整應用指南:註冊、登入、密碼找回、角色授權

     編輯:關於ASP.NET

ASP.NET 2.0 內建 Membership 框架提供標準化使用者管理 API,配合 FormsAuthentication 可快速建立完整認證授權體系,避免重複造輪子。本文整理核心 API 用法與配置要點。

核心命名空間

using System.Web.Security; // Membership, FormsAuthentication, Roles

1. 使用者註冊

MembershipCreateStatus status;
MembershipUser user = Membership.CreateUser(
    userName: txtUserName.Text,
    password: txtPassword.Text,
    email: txtEmail.Text,
    passwordQuestion: txtQuestion.Text,
    passwordAnswer: txtAnswer.Text,
    isApproved: true,
    providerUserKey: null,
    status: out status);

if (status == MembershipCreateStatus.Success)
{
    // 可選:自動登入
    FormsAuthentication.RedirectFromLoginPage(user.UserName, false);
}
else
{
    // 處理 DuplicateUserName, InvalidPassword, DuplicateEmail 等狀態
    lblMsg.Text = GetFriendlyMessage(status);
}

2. 使用者登入

if (Membership.ValidateUser(txtUserName.Text, txtPassword.Text))
{
    // 建立表單驗證票並導向原頁或預設頁
    FormsAuthentication.RedirectFromLoginPage(txtUserName.Text, chkRememberMe.Checked);
}
else
{
    lblMsg.Text = "帳號或密碼錯誤";
}

3. 密碼重設 (密碼問題/答案)

MembershipUser u = Membership.GetUser(txtUserName.Text);
if (u != null)
{
    string newPwd = u.ResetPassword(txtAnswer.Text); // 需設定 requiresQuestionAndAnswer="true"
    // 寄送新密碼至 Email 或顯示給用戶
}

4. 變更密碼 (已登入用戶)

MembershipUser u = Membership.GetUser(User.Identity.Name);
if (u.ChangePassword(txtOldPwd.Text, txtNewPwd.Text))
    lblMsg.Text = "密碼變更成功";
else
    lblMsg.Text = "舊密碼錯誤或新密碼不符合原則";

5. 角色授權

// 建立角色
if (!Roles.RoleExists("Admin")) Roles.CreateRole("Admin");

// 將用戶加入角色
Roles.AddUserToRole(userName, "Admin");

// 判斷角色 (頁面/程式碼)
if (User.IsInRole("Admin")) { /* 管理員功能 */ }

// 配合 web.config urlAuthorization
// <location path="Admin"> <system.web> <authorization> <allow roles="Admin"/> <deny users="*"/> </authorization> </system.web> </location>

web.config 關鍵配置

<membership defaultProvider="SqlMembershipProvider">
  <providers>
    <clear/>
    <add name="SqlMembershipProvider"
         type="System.Web.Security.SqlMembershipProvider"
         connectionStringName="LocalSqlServer"
         enablePasswordRetrieval="false"
         enablePasswordReset="true"
         requiresQuestionAndAnswer="true"
         requiresUniqueEmail="true"
         passwordFormat="Hashed"
         maxInvalidPasswordAttempts="5"
         passwordAttemptWindow="10"
         minRequiredPasswordLength="7"
         minRequiredNonalphanumericCharacters="1" />
  </providers>
</membership>

<authentication mode="Forms">
  <forms loginUrl="~/Login.aspx" timeout="30" slidingExpiration="true" />
</authentication>

遷移建議

ASP.NET Core 採用 **ASP.NET Core Identity**,架構不同但概念相通 (UserManager, SignInManager, RoleManager)。遷移時需重新雜湊密碼或實作自訂 PasswordHasher 相容舊雜湊。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved