laravel提供内置认证功能,通过 artisan 命令生成脚手架并迁移 数据库 ;symfony 使用 Security 组件配置 防火墙 和用户 接口 ;JWT 用于无状态 API 认证,需安装对应库并生成密钥;自定义 中间件 可实现角色权限控制,确保路由安全访问。

如果您正在开发一个需要用户登录和权限管理的 Web 应用,那么在 php 框架中实现身份认证是必不可少的一环。身份认证系统能够确保只有合法用户才能访问受保护的资源。
本文运行环境:Lenovo ThinkPad X1 carbon,ubuntu 22.04
一、使用 Laravel 内置认证系统
Laravel 提供了开箱即用的身份认证功能,可以快速搭建用户注册、登录和会话管理模块。
1、通过 Artisan 命令生成认证脚手架:php artisan make:auth,该命令将创建登录、注册和密码重置视图及路由。
立即学习“PHP 免费学习笔记(深入)”;
2、运行迁移命令以创建 users 表和 password_resets 表:php artisan migrate。
3、配置 config/auth.php 文件中的认证驱动和用户模型,确保 User 模型启用了IlluminateFoundationAuthUser trait。
4、访问 /login 和/register路径测试认证流程是否正常工作。
二、基于 Symfony Security 组件构建认证
Symfony 的 Security 组件提供灵活的身份验证和授权机制,支持多种认证方式如表单登录、API 令牌等。
1、安装 Security 组件:composer require symfony/security-bundle。
2、定义用户实体类并实现 UserInterface 接口,包含 getRoles()、getPassword()等方法。
3、配置 security.yaml 文件,设置 防火墙 规则,例如启用 form_login 或 http_basic 认证方式。
4、创建登录表单控制器,并处理认证请求,利用 AuthenticationManager 进行手动认证。
三、使用 JWT 实现无状态 API 认证
对于前 后端 分离的应用,jsON Web Token(JWT)是一种常见的认证方案,可在不依赖会话的情况下验证用户身份。
1、安装 TymonJWTAuth 库:composer require tymon/jwt-auth。
2、发布配置文件并生成密钥:php artisan vendor:publish –provider=”TymonJWTAuthProvidersLaravelServiceProvider” 和 php artisan jwt:secret。
3、在 LoginController 中使用 JWTGuard 签发 Token,成功登录后返回 token字符串。
4、前端 在后续请求的 Authorization 头中携带 Bearer Token,后端 通过中间件解析并验证 Token 有效性。
四、自定义中间件进行权限控制
在完成基本身份认证后,可通过自定义中间件对特定路由实施更细粒度的访问控制。
1、生成中间件:php artisan make:middleware CheckRole。
2、在 handle 方法中检查当前用户的角色或权限字段,例如if ($request->user()->role !== 'admin')。
3、若不符合条件则中断请求并返回 403 响应,否则调用 $next($request) 继续执行。
4、将中间件注册到 Kernel.php 并在路由中应用,如Route::get('admin', [AdminController::class, 'index'])->middleware('check.role');。


