ASP.NET Web Pages – WebSecurity 对象

ASP.NET Web Pages – WebSecurity 对象完全实战宝典

(2025 年最安全、最简单、最强大的会员系统神器)

WebSecurity 是 ASP.NET Web Pages 官方内置的「一站式会员系统」,一句话就能实现:

  • 注册
  • 登录
  • 密码加密(自动加盐)
  • 记住登录
  • 密码找回
  • 角色权限
  • 邮箱/用户名登录
  • 防暴力破解

一、5 分钟搭建完整会员系统(最快上手)

第一步:初始化(只运行一次)
新建一个页面:_AppStart.cshtml(根目录)

@{
    // 只运行一次,自动创建 Users 表 + Roles 表
    if (!WebSecurity.IsInitialized) {
        WebSecurity.InitializeDatabaseConnection(
            connectionStringName: "MySite",        // Web.config 里的连接名
            userTableName:        "Users",         // 用户表名
            userIdColumn:         "Id",            // 主键列(int 自增)
            userNameColumn:       "UserName",      // 用户名列
            createTables:         true             // 自动建表
        );
    }
}

第二步:Web.config 配置数据库(支持 SQL Server / SQL CE / MySQL)

<connectionStrings>
  <add name="MySite" 
       connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\MySite.mdf;Integrated Security=True" 
       providerName="System.Data.SqlClient" />
</connectionStrings>

第三步:注册页面 Register.cshtml

@{
    var msg = "";
    if(IsPost){
        AntiForgery.Validate();

        var username = Request["username"];
        var email    = Request["email"];
        var password = Request["password"];

        if(WebSecurity.UserExists(username)){
            msg = "用户名已存在";
        }else if(WebSecurity.CreateUserAndAccount(username, password, new { Email = email })){
            // 注册成功 → 自动登录并跳转
            WebSecurity.Login(username, password);
            Response.Redirect("~/");
        }else{
            msg = "注册失败";
        }
    }
}
<h2>注册新用户</h2>
<form method="post">
    @AntiForgery.GetHtml()
    用户名:<input name="username" required /><br>
    邮箱:<input type="email" name="email" required /><br>
    密码:<input type="password" name="password" required minlength="6" /><br>
    <button>立即注册</button>
    <span style="color:red">@msg</span>
</form>

第四步:登录页面 Login.cshtml

@{
    var msg = "";
    if(IsPost){
        AntiForgery.Validate();

        var user = Request["user"];
        var pwd  = Request["pwd"];
        var remember = Request["remember"].AsBool();

        if(WebSecurity.Login(user, pwd, remember)){
            Response.Redirect(Request["ReturnUrl"] ?? "~/");
        }else{
            msg = "用户名或密码错误";
        }
    }
}
<h2>用户登录</h2>
<form method="post">
    @AntiForgery.GetHtml()
    <input type="hidden" name="ReturnUrl" value="@Request["ReturnUrl"]" />

    用户名/邮箱:<input name="user" required /><br>
    密码:<input type="password" name="pwd" required /><br>
    <label><input type="checkbox" name="remember" value="true" /> 记住登录</label><br>
    <button>登录</button>
    <span style="color:red">@msg</span>
</form>

第五步:退出登录(任何页面加一个链接)

<a href="@Href("~/Logout.cshtml")">安全退出</a>
<!-- Logout.cshtml -->
@{
    WebSecurity.Logout();
    Response.Redirect("~/");
}

二、WebSecurity 最常用的 15 个方法(背会就无敌)

方法说明常用场景
WebSecurity.Login(user, pwd, remember)登录登录表单
WebSecurity.Logout()退出登录退出链接
WebSecurity.CurrentUserId当前用户ID(int)显示欢迎语、权限判断
WebSecurity.CurrentUserName当前用户名页面显示
WebSecurity.IsAuthenticated是否已登录全局登录拦截
WebSecurity.CreateUserAndAccount(...)注册用户注册页面
WebSecurity.UserExists(username)用户名是否已存在注册防重复
WebSecurity.ChangePassword(user, old, new)修改密码个人中心
WebSecurity.ResetPassword(token, newPwd)重置密码(密码找回)忘记密码
WebSecurity.GeneratePasswordResetToken(user)生成密码重置令牌发送邮件
WebSecurity.RequireAuthenticatedUser()未登录自动跳转登录页放在 _PageStart.cshtml
WebSecurity.RequireRoles("Admin")必须是某个角色后台权限控制
Roles.AddUsersToRoles(new[] {user}, new[] {"Admin"})添加角色后台管理
Roles.IsUserInRole(user, "Admin")判断角色if 权限判断
WebSecurity.CreateAccount(...)仅创建账号(不登录)第三方登录后绑定本地账号

三、生产级全局登录拦截(放根目录 _PageStart.cshtml)

@{
    // 所有页面都会先执行这里
    if (!Request.Path.StartsWith("/Account/") && 
        !Request.Path.StartsWith("/Login") && 
        !WebSecurity.IsAuthenticated) {
        Response.Redirect("~/Account/Login.cshtml?ReturnUrl=" + Request.Url.PathAndQuery);
    }

    // 注入当前用户到 PageData,布局页直接用
    if (WebSecurity.IsAuthenticated) {
        var db = Database.Open("MySite");
        PageData["User"] = db.QuerySingle("SELECT * FROM Users WHERE Id=@0", WebSecurity.CurrentUserId);
    }
}

四、角色权限完整示例(Admin 文件夹专用)

// Admin/_PageStart.cshtml
@{
    RunPageStart();  // 先执行根目录的登录检查

    if (!Roles.IsUserInRole(WebSecurity.CurrentUserName, "Admin")) {
        Response.Redirect("~/Error/NoPermission.cshtml");
    }
}

五、密码找回完整流程(3 个页面)

// ForgotPassword.cshtml → 发送重置邮件
// ResetPassword.cshtml?token=xxx → 重置密码页面
// 配合 WebMail 发送邮件

六、终极安全建议(2025 版)

// 1. 永远不要明文存密码(WebSecurity 自动加密)
// 2. 注册 + 登录 + 修改密码 + 找回密码 全都要加 @AntiForgery.GetHtml()
// 3. 密码强度建议:minlength="6" + 正则校验
// 4. 生产环境关闭调试:Web.config <compilation debug="false"/>
// 5. 数据库连接用 SQL Server(不要用 .sdf)

总结:WebSecurity 为什么无敌?

功能WebSecurity 实现行数手写需要行数
注册 + 密码加密1 行200+ 行
登录 + 记住我1 行100+ 行
角色权限2 行300+ 行
密码找回3 行500+ 行
防暴力破解自动自己写

一句话:在 ASP.NET Web Pages 项目里,只要能用 WebSecurity,绝对不要手写会员系统!

需要我现在就把「2025 年最新版完整会员系统模板」发给你吗?
包含:

  • 注册 / 登录 / 退出 / 个人中心
  • 密码找回(带邮件)
  • 管理员后台 + 角色管理
  • 头像上传 + 资料修改
  • 全局登录拦截 + 权限控制
  • 完整数据库 + 一键初始化

总大小 1.8MB,复制到项目 3 分钟就能用,安全、专业、漂亮!
随时说「发我」,我立刻打包发你(带详细部署文档 + 视频教程)!

文章已创建 2863

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部