You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修改Laravel自动生成的注册逻辑:新增邮箱验证功能

给Laravel注册用户添加邮箱验证的完整步骤

嘿,作为Laravel新手,你已经迈出了关键第一步——修改RegisterController的create方法,接下来咱们把剩下的步骤补全,轻松实现邮箱验证功能:

1. 让User模型支持邮箱验证

打开你的app/Models/User.php(Laravel 8+版本)或者app/User.php(旧版本),让模型实现Illuminate\Contracts\Auth\MustVerifyEmail接口:

<?php

namespace App\Models;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

class User extends Authenticatable implements MustVerifyEmail
{
    use Notifiable;

    // 其他原有代码...
}

2. 在注册逻辑里触发验证邮件发送

回到你的RegisterController的create方法,在创建用户后,调用Laravel内置的验证邮件发送方法:

protected function create(array $data) { 
    $user = User::create([ 
        'name' => $data['name'], 
        'email' => $data['email'], 
        'password' => Hash::make($data['password']), 
    ]); 

    // 发送邮箱验证通知
    $user->sendEmailVerificationNotification();

    return $user;
}

3. 添加邮箱验证相关路由

打开routes/web.php,把原来的Auth::routes();改成下面这样,开启验证路由生成:

Auth::routes(['verify' => true]);

这会自动生成三个关键路由:

  • 验证邮箱提示页面(路由名称verification.notice)
  • 处理邮箱验证请求的路由
  • 重新发送验证邮件的路由

4. 配置注册后的跳转页面

默认注册成功后会跳转到home路由,我们可以让用户直接跳转到验证提示页面。在RegisterController里添加以下内容二选一即可:

// 方式1:直接设置跳转地址属性
protected $redirectTo = '/email/verify';

// 方式2:重写registered方法(更灵活,可添加额外逻辑)
protected function registered(Request $request, $user)
{
    return redirect()->route('verification.notice');
}

5. 保护需要验证邮箱才能访问的路由

如果你希望某些页面只有验证过邮箱的用户才能访问,给这些路由加上verified中间件:

Route::middleware(['auth', 'verified'])->group(function () {
    Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard');
    // 其他需要验证邮箱才能进入的路由...
});

6. 确保数据库有验证字段

如果你的users表还没有email_verified_at字段,需要生成迁移来添加:

php artisan make:migration add_email_verified_at_to_users_table --table=users

然后在生成的迁移文件里添加字段:

public function up()
{
    Schema::table('users', function (Blueprint $table) {
        $table->timestamp('email_verified_at')->nullable();
    });
}

public function down()
{
    Schema::table('users', function (Blueprint $table) {
        $table->dropColumn('email_verified_at');
    });
}

最后运行迁移生效:

php artisan migrate

7. 配置邮件驱动(关键环节!)

要发送验证邮件,你需要在.env文件里配置邮件服务,比如用Mailtrap做测试环境配置:

MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=你的mailtrap用户名
MAIL_PASSWORD=你的mailtrap密码
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=your@example.com
MAIL_FROM_NAME="${APP_NAME}"

这样一套流程下来,新注册用户就会收到验证邮件,点击链接完成邮箱验证后,才能访问你设置的受保护页面啦!

内容的提问来源于stack exchange,提问作者Patrick Luy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:26:52