ASP.NET 2.0 內建 Membership 框架提供標準化使用者管理 API,配合 FormsAuthentication 可快速建立完整認證授權體系,避免重複造輪子。本文整理核心 API 用法與配置要點。
using System.Web.Security; // Membership, FormsAuthentication, Roles
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);
}
if (Membership.ValidateUser(txtUserName.Text, txtPassword.Text))
{
// 建立表單驗證票並導向原頁或預設頁
FormsAuthentication.RedirectFromLoginPage(txtUserName.Text, chkRememberMe.Checked);
}
else
{
lblMsg.Text = "帳號或密碼錯誤";
}
MembershipUser u = Membership.GetUser(txtUserName.Text);
if (u != null)
{
string newPwd = u.ResetPassword(txtAnswer.Text); // 需設定 requiresQuestionAndAnswer="true"
// 寄送新密碼至 Email 或顯示給用戶
}
MembershipUser u = Membership.GetUser(User.Identity.Name);
if (u.ChangePassword(txtOldPwd.Text, txtNewPwd.Text))
lblMsg.Text = "密碼變更成功";
else
lblMsg.Text = "舊密碼錯誤或新密碼不符合原則";
// 建立角色
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>
<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 相容舊雜湊。