📜  laravel 中的电子邮件验证 - PHP (1)

📅  最后修改于: 2023-12-03 14:43:46.470000             🧑  作者: Mango

Laravel 中的电子邮件验证 - PHP

在 Laravel 中,通过使用预置的验证规则,开发人员可以轻松地将电子邮件验证整合到应用程序中。在这里,我们将为您提供有关 Laravel 中电子邮件验证的详细信息。

配置电子邮件验证

要配置 Laravel 中的电子邮件验证,我们需要在 config/auth.php 文件中添加以下内容:

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'api' => [
        'driver' => 'token',
        'provider' => 'users',
    ],
],

'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\Models\User::class,
    ],
],

'passwords' => [
    'users' => [
        'provider' => 'users',
        'table' => 'password_resets',
        'expire' => 60,
        'throttle' => 60,
    ],
],

这将允许 Laravel 应用程序使用 users 数据库表进行用户验证,并为每个用户创建 password_resets 表。

我们还需要更新 User 模型,以包含 Illuminate\Auth\Passwords\CanResetPassword trait 和 Illuminate\Contracts\Auth\CanResetPassword 接口:

use Illuminate\Auth\Passwords\CanResetPassword;
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;

class User extends Authenticatable implements CanResetPasswordContract
{
    use Notifiable, CanResetPassword;
    ...
}
编写电子邮件验证规则

现在,我们将定义一个电子邮件验证规则。首先,我们需要创建一个新的验证器:

use Illuminate\Contracts\Validation\Validator;

class EmailValidator implements Validator
{
    protected $email;
    protected $errors = [];

    public function __construct($email)
    {
        $this->email = $email;
    }

    public function fails()
    {
        $this->validate();

        return !empty($this->errors);
    }

    public function errors()
    {
        return $this->errors;
    }

    protected function validate()
    {
        if (!filter_var($this->email, FILTER_VALIDATE_EMAIL)) {
            $this->errors['email'] = 'Invalid email address.';
        }
    }
}

然后,我们可以在 AppServiceProvider 中创建一个自定义验证规则:

use Illuminate\Support\Facades\Validator;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        Validator::extend('valid_email', function ($attribute, $value, $parameters, $validator) {
            $validator = new EmailValidator($value);

            return !$validator->fails();
        });
    }

    public function register()
    {
        //
    }
}

现在,我们已经创建了一个可用的电子邮件验证规则,我们可以使用它来验证用户的电子邮件地址。

在控制器中使用电子邮件验证

为了在控制器中使用电子邮件验证,我们可以在控制器中添加以下代码:

public function validateEmail(Request $request)
{
    $this->validate($request, [
        'email' => 'required|valid_email'
    ]);

    return response()->json([
        'message' => 'Email is valid.'
    ]);
}

这将要求请求必须包含一个 email 参数,并使用我们刚刚创建的 valid_email 规则来验证该参数的值是否为有效的电子邮件地址。

结论

在本文中,我们深入探讨了 Laravel 中的电子邮件验证。我们了解到如何配置电子邮件验证,如何编写电子邮件验证规则,并如何在控制器中使用电子邮件验证。我们希望这篇文章对 Laravel 开发人员能够有所帮助。