当前位置:  首页>> 技术小册>> Laravel(10.x)从入门到精通(十五)

Email认证 - 准备模型

在Laravel框架中,实现用户认证是构建现代Web应用不可或缺的一部分。Email认证作为用户验证的主要手段,确保了系统的安全性和用户数据的准确性。本章节将深入讲解如何在Laravel 10.x中准备用于Email认证的模型,包括用户模型的创建、迁移文件的设置、以及模型与Laravel内置认证系统的集成。

一、引言

Laravel通过其强大的认证系统Laravel Breeze或Laravel Fortify(视版本而定),为开发者提供了快速搭建用户认证功能的框架。然而,在利用这些工具之前,我们首先需要准备一个适合Email认证的用户模型。用户模型(通常命名为User)将作为所有认证逻辑的基础,存储用户的个人信息如用户名、邮箱地址、密码哈希等。

二、创建用户模型

在Laravel中,用户模型默认位于App\Models目录下,通常命名为User.php。如果尚未存在,你可以通过Artisan命令来生成它(虽然对于大多数Laravel项目来说,这是默认创建的):

  1. php artisan make:model User -m

这里的-m选项告诉Artisan同时生成一个数据库迁移文件(通常命名为create_users_table.php),用于定义users表的结构。

三、定义用户迁移文件

打开生成的迁移文件(位于database/migrations目录),你会看到Laravel为users表预设了一些字段。对于Email认证,至少需要确保以下几个字段存在:

  • id(主键,通常使用自增ID)
  • name(用户的名字)
  • email(用户的电子邮件地址,唯一)
  • email_verified_at(邮箱验证时间戳,可为空)
  • password(用户密码的哈希值)
  • remember_token(记住我功能的令牌,可为空)
  • created_atupdated_at(时间戳,自动管理)

示例迁移文件内容可能如下:

  1. use Illuminate\Database\Migrations\Migration;
  2. use Illuminate\Database\Schema\Blueprint;
  3. use Illuminate\Support\Facades\Schema;
  4. class CreateUsersTable extends Migration
  5. {
  6. /**
  7. * Run the migrations.
  8. *
  9. * @return void
  10. */
  11. public function up()
  12. {
  13. Schema::create('users', function (Blueprint $table) {
  14. $table->id();
  15. $table->string('name');
  16. $table->string('email')->unique();
  17. $table->timestamp('email_verified_at')->nullable();
  18. $table->string('password');
  19. $table->rememberToken();
  20. $table->timestamps();
  21. });
  22. }
  23. /**
  24. * Reverse the migrations.
  25. *
  26. * @return void
  27. */
  28. public function down()
  29. {
  30. Schema::dropIfExists('users');
  31. }
  32. }

四、配置用户模型

接下来,需要确保User模型正确配置了用于认证的必要特质(Traits)和属性。Laravel的认证系统依赖于Illuminate\Foundation\Auth\User接口或Authenticatable特质来实现认证逻辑。

通常,Laravel的User模型已经包含了Authenticatable特质,如下所示:

  1. namespace App\Models;
  2. use Illuminate\Foundation\Auth\User as Authenticatable;
  3. use Illuminate\Notifications\Notifiable;
  4. use Illuminate\Contracts\Auth\MustVerifyEmail;
  5. use Illuminate\Database\Eloquent\Factories\HasFactory;
  6. class User extends Authenticatable implements MustVerifyEmail
  7. {
  8. use HasFactory, Notifiable;
  9. /**
  10. * The attributes that are mass assignable.
  11. *
  12. * @var array
  13. */
  14. protected $fillable = [
  15. 'name', 'email', 'password',
  16. ];
  17. /**
  18. * The attributes that should be hidden for arrays.
  19. *
  20. * @var array
  21. */
  22. protected $hidden = [
  23. 'password', 'remember_token',
  24. ];
  25. /**
  26. * The attributes that should be cast to native types.
  27. *
  28. * @var array
  29. */
  30. protected $casts = [
  31. 'email_verified_at' => 'datetime',
  32. ];
  33. }

注意,这里User模型还实现了MustVerifyEmail接口,这是Laravel用于处理邮箱验证逻辑的接口。实现该接口后,Laravel会在用户注册后自动要求用户验证其邮箱地址。

五、自定义认证行为

虽然Laravel的认证系统提供了强大的开箱即用功能,但在某些情况下,你可能需要自定义认证行为。例如,你可能想在用户尝试登录时执行额外的验证步骤,或者在用户注册后自动执行某些操作。

Laravel允许你通过几种方式来自定义认证行为,包括但不限于:

  • 监听器(Listeners):使用Laravel的事件系统来监听用户注册、登录等事件,并在这些事件发生时执行自定义逻辑。
  • 认证守卫(Guards)提供者(Providers):通过配置config/auth.php文件,你可以自定义认证守卫和提供者,以支持不同的认证机制和用户数据源。
  • 中间件(Middleware):创建自定义中间件来在用户请求的不同阶段插入自定义逻辑。

六、集成Laravel Breeze或Fortify

从Laravel 8开始,Laravel官方推荐使用Breeze或Fortify作为认证系统的脚手架。这些工具简化了认证逻辑的搭建过程,并提供了现成的前端视图和路由。

  • Laravel Breeze:一个轻量级的认证启动模板,包含登录、注册、邮箱验证、密码重置等页面。它使用Tailwind CSS进行样式设计,但你可以轻松替换为其他CSS框架。
  • Laravel Fortify:一个功能更全面的认证系统,基于Laravel Breeze但提供了更多的定制选项和特性,如两因素认证、速率限制等。

根据你的项目需求,你可以选择使用其中一个工具来快速搭建Email认证系统。安装和配置过程通常涉及几个简单的Artisan命令和配置文件的修改。

七、总结

在Laravel 10.x中准备用于Email认证的用户模型是一个涉及多个步骤的过程,包括创建用户模型、定义迁移文件、配置用户模型以及(可选地)集成Laravel Breeze或Fortify。通过遵循上述步骤,你可以确保你的用户认证系统既安全又易于维护。记住,Laravel的认证系统是非常灵活的,你可以根据自己的需求进行定制和扩展。


该分类下的相关小册推荐: