Laravel Fortify如何快速搭建认证系统_后端认证逻辑脚手架

32次阅读

Laravel Fortify 提供认证系统脚手架,通过 composer require laravel/fortify 安装并运行 php artisan fortify:install 发布配置文件与服务提供者,配置 config/fortify.php 中的 features、username、home 等选项以启用注册、密码重置等功能,确保 User 模型实现 MustVerifyEmail 接口(如需邮箱验证),Fortify 自动注册 /login、/register 等路由并在 RouteServiceProvider 中可配置前缀,需自行创建 Blade 视图处理登录注册表单并使用 @error 指令显示验证错误,可通过扩展 RegisteredUserController 的 store 方法添加密码强度正则验证,结合 Spatie laravel-permission 包实现角色权限控制,安装后发布配置与迁移并执行 php artisan migrate,在 User 模型引入 HasRoles trait 并创建角色权限分配给用户,利用 can 或 hasRole 进行权限判断,Fortify 可与 Sanctum 或 Passport 集成实现 API 认证,Sanctum 适用于前端应用通过 Cookie 认证,Passport 支持第三方 OAuth2.0 访问,均在用户经 Fortify 登录后通过 token 实现 API 请求认证。

Laravel Fortify如何快速搭建认证系统_后端认证逻辑脚手架

Laravel Fortify 旨在快速搭建一个健壮的认证系统,它提供了一个后端认证逻辑的脚手架,省去了从零开始构建认证流程的繁琐工作。

解决方案

  1. 安装 Fortify:

    composer require laravel/fortify

    安装完成后,运行 Fortify 的安装命令:

    php artisan fortify:install

    这个命令会发布 Fortify 的配置文件到 config/fortify.php,并且注册 Fortify 服务提供者。

  2. 配置 Fortify:

    打开 config/fortify.php 文件,你可以配置各种选项,例如:

    • features:启用或禁用不同的认证功能,如注册、重置密码、双因素认证等。
    • username:指定用于认证的字段,默认为 email
    • home:认证成功后重定向到的 URL。

    根据你的需求修改这些配置。

  3. 配置用户模型:

    确保你的 appModelsUser 模型实现了 IlluminateContractsAuthMustVerifyEmail 接口(如果需要邮箱验证)。

  4. 路由:

    Fortify 会自动注册一些路由,例如 /login/registerconfig/fortify.php0 等。 你可以在 config/fortify.php1 中配置这些路由的前缀。

  5. 视图:

    Fortify 默认不提供视图,你需要自己创建登录、注册、重置密码等视图。 你可以使用 Blade 模板引擎来创建这些视图,并使用 Fortify 提供的控制器来处理表单提交。

    例如,创建一个简单的登录视图 config/fortify.php2:

    <form method="POST" action="{{ route('login') }}">     @csrf      <div>         <label for="email">Email</label>         <input id="email" type="email" name="email" value="{{ old('email') }}" required autofocus>         @error('email')             <span>{{ $message }}</span>         @enderror     </div>      <div>         <label for="password">Password</label>         <input id="password" type="password" name="password" required>         @error('password')             <span>{{ $message }}</span>         @enderror     </div>      <div>         <button type="submit">Log in</button>     </div> </form>
  6. 控制器:

    Fortify 提供了一些控制器,例如 config/fortify.php3、config/fortify.php4 等。 你可以扩展这些控制器来定制认证逻辑。

    例如,如果你想在用户注册后执行一些额外的操作,可以创建一个新的控制器,继承 config/fortify.php4,并重写 config/fortify.php6 方法。

  7. 自定义认证逻辑:

    如果 Fortify 提供的默认认证逻辑不能满足你的需求,你可以自定义认证逻辑。 例如,你可以使用不同的认证驱动,或者使用第三方认证服务。

    Fortify 允许你通过配置 config/fortify.php 文件中的 config/fortify.php8 和 config/fortify.php9 选项来自定义认证驱动和密码哈希算法。

    Laravel Fortify如何快速搭建认证系统_后端认证逻辑脚手架

    知我AI·PC客户端

    离线运行 AI 大模型,构建你的私有个人知识库,对话式提取文件知识,保证个人文件数据安全

    Laravel Fortify如何快速搭建认证系统_后端认证逻辑脚手架0

    查看详情 Laravel Fortify如何快速搭建认证系统_后端认证逻辑脚手架

如何处理Fortify的注册验证错误,例如密码强度不足?

Fortify 默认的注册验证规则可能比较简单,如果你需要更严格的密码强度验证,你需要在 config/fortify.php4 的 config/fortify.php6 方法中自定义验证规则。

首先,找到 features2 (如果不存在,你需要发布 Fortify 的控制器:features3)。

然后,修改 config/fortify.php6 方法中的验证规则:

use IlluminateSupportFacadesValidator;  public function store(Request $request) {     Validator::make($request->all(), [         'name' => ['required', 'string', 'max:255'],         'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],         'password' => ['required', 'string', 'min:8', 'confirmed', 'regex:/^(?=.*[a-z])(?=.*[A-Z])(?=.*d)(?=.*[@$!%*?&])[A-Za-zd@$!%*?&]{8,}$/'],     ])->validate();      // ... (创建用户的代码) }

这里添加了一个 features5 规则,用于验证密码是否符合特定的强度要求(至少包含一个大写字母、一个小写字母、一个数字和一个特殊字符)。 你可以根据你的需求修改这个正则表达式

注意,为了让前端能够正确显示验证错误信息,你需要确保你的注册视图能够正确处理验证错误。 例如:

@error('password')     <span>{{ $message }}</span> @enderror

如何实现基于角色的权限控制与Fortify集成?

实现基于角色的权限控制通常需要一个包来辅助,例如 Spatie 的 features6 包。 首先安装它:

composer require spatie/laravel-permission

然后发布配置文件和迁移文件:

php artisan vendor:publish --provider="SpatiePermissionPermissionServiceProvider" --tag="config" php artisan vendor:publish --provider="SpatiePermissionPermissionServiceProvider" --tag="migrations" php artisan migrate

接下来,在 AppModelsUser 模型中使用 features8 trait:

use IlluminateFoundationAuthUser as Authenticatable; use SpatiePermissionTraitsHasRoles;  class User extends Authenticatable {     use HasRoles;      // ... }

现在你可以创建角色和权限,并将它们分配给用户:

use SpatiePermissionModelsRole; use SpatiePermissionModelsPermission;  $role = Role::create(['name' => 'admin']); $permission = Permission::create(['name' => 'edit articles']);  $role->givePermissionTo($permission); $user->assignRole('admin');

最后,你可以在你的控制器、视图或中间件中使用 features9 指令或 username0 方法来检查用户是否具有特定的权限或角色。

例如,在控制器中:

public function edit(Article $article) {     if (! auth()->user()->can('edit articles')) {         abort(403);     }      // ... }

在视图中:

@can('edit articles')     <a href="/articles/{{ $article->id }}/edit">Edit</a> @endcan

Fortify 如何与 Sanctum 或 Passport 集成以实现 API 认证?

Fortify 主要用于 Web 界面的认证,而 Sanctum 和 Passport 用于 API 认证。 虽然它们的设计目标不同,但可以结合使用。

  • Sanctum: 如果你的 API 只是供你的前端应用使用,Sanctum 是一个不错的选择。 它可以让你使用传统的 Cookie 认证来认证 API 请求。 你只需要在你的 API 路由上应用 username1 中间件即可。 Fortify 负责处理用户登录,Sanctum 负责处理 API 认证。

  • Passport: 如果你的 API 需要供第三方应用使用,Passport 是一个更好的选择。 它提供了 OAuth 2.0 认证流程,允许第三方应用代表用户访问你的 API。 你需要安装和配置 Passport,并在你的 API 路由上应用 username2 中间件。 Fortify 仍然负责处理用户登录,Passport 负责处理 API 认证。

集成 Sanctum 或 Passport 的关键在于确保用户首先通过 Fortify 登录,然后在 API 请求中使用 Sanctum 的 token 或 Passport 的 access token。 具体的集成方式取决于你的 API 的需求和设计。 例如,你可以创建一个 API 路由,在用户登录后返回 Sanctum 的 token 或 Passport 的 access token。

以上就是Laravel Fortify如何快速搭建认证系统_后端认证逻辑脚手架的详细内容,更多请关注php word laravel 前端 composer 正则表达式 cookie cad app php laravel composer 中间件 正则表达式 require Cookie Error Token register 继承 接口 Regex 算法 http Access

php word laravel 前端 composer 正则表达式 cookie cad app php laravel composer 中间件 正则表达式 require Cookie Error Token register 继承 接口 Regex 算法 http Access

text=ZqhQzanResources