主页/PHP笔记/PHP问答/框架Laravel/如何在Laravel中验证邮箱(附示例)

如何在Laravel中验证邮箱(附示例)

Bug编译狮

Bug编译狮

在 Laravel 中验证邮箱是一个常见的需求,可以使用内置的验证器来实现。以下是如何在 Laravel 中验证邮箱的步骤:

1. 安装必要的包

首先,确保你已经安装了 laravel/frameworklaravel/ui

composer require laravel/framework

然后安装 laravel/ui 包以生成身份验证系统。

php artisan ui:auth --theme=bootstrap

2. 配置验证规则

在你的控制器中,你可以使用 validate 方法来验证邮箱字段。

use IlluminateHttpRequest;
use AppHttpControllersController;

class UserController extends Controller
{
    public function store(Request $request)
    {
        // 验证邮箱
        $validatedData = $request->validate([
            'email' => 'required|email|max:255|unique:users',
        ]);

        // 如果验证通过,继续处理数据
        $user = User::create($validatedData);

        return redirect()->route('home');
    }
}

3. 示例代码

假设我们有一个简单的表单来提交用户信息,其中包含邮箱字段。以下是完整的示例代码:

表单创建

resources/views/users/create.blade.php 文件中创建表单。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Create User</title>
</head>
<body>
    <h1>Create User</h1>
    <form action="{{ route('users.store') }}" method="post">
        @csrf
        <div class="form-group">
            <label for="email">Email:</label>
            <input type="email" id="email" name="email" required class="form-control">
        </div>
        <button type="submit" class="btn btn-primary">Submit</button>
    </form>
</body>
</html>

控制器方法

app/Http/Controllers/UserController.php 文件中,添加 store 方法。

use IlluminateHttpRequest;
use AppModelsUser;
use AppHttpControllersController;

class UserController extends Controller
{
    public function store(Request $request)
    {
        // 验证邮箱
        $validatedData = $request->validate([
            'email' => 'required|email|max:255|unique:users',
        ]);

        // 如果验证通过,继续处理数据
        $user = User::create($validatedData);

        return redirect()->route('home');
    }
}

4. 验证错误处理

为了提供更好的用户体验,可以在视图中显示验证错误。

resources/views/users/create.blade.php 文件中添加错误处理逻辑。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Create User</title>
</head>
<body>
    <h1>Create User</h1>
    <form action="{{ route('users.store') }}" method="post">
        @csrf
        <div class="form-group">
            <label for="email">Email:</label>
            <input type="email" id="email" name="email" required class="form-control">
            @if ($errors->has('email'))
                <span class="text-danger">{{ $errors->first('email') }}</span>
            @endif
        </div>
        <button type="submit" class="btn btn-primary">Submit</button>
    </form>
</body>
</html>

通过以上步骤,你就可以在 Laravel 中成功验证邮箱了。希望这对你有帮助!

黑板Bug讲师

黑板Bug讲师

介绍

电子邮件验证是现代Web应用程序不可或缺的一部分,用于确保用户的真实身份并减少垃圾邮件。Laravel作为一款强大的PHP框架,提供了实现电子邮件验证的简单方法。本教程将带你一步步地了解如何在Laravel应用中实现电子邮件验证。我们将从基础开始讲解,然后逐步深入到更复杂的场景,提供代码示例和预期输出等具体内容。

前置条件

在继续之前,您应该已经:

访问邮件服务以发送电子邮件

为您的应用配置了一个数据库。

了解Laravel的MVC结构

一个运行中的Laravel应用程序

基础设置

使用 Laravel 设置基本的电子邮件验证非常简单,通过使用该功能。MustVerifyEmail合同和内置通知系统。让我们先在新的Laravel项目中实现电子邮件验证功能。

首先,请确保您的User模型实现了。MustVerifyEmail合同:

<?php
namespace AppModels;

use IlluminateContractsAuthMustVerifyEmail as MustVerifyEmailContract;
use IlluminateFoundationAuthUser as Authenticatable;
use IlluminateNotificationsNotifiable;

class User extends Authenticatable implements MustVerifyEmailContract
{
    use Notifiable;

    // ...
}

接下来,修改默认路由。web.php包括电子邮件验证路由:

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

好的,请提供需要更新的内容或信息。registered()对不起,我不太明白您的意思,请您重新描述一下。RegisterController.php(或等同于注册控制器的人员)在注册后确保电子邮件验证是必要的:

protected function registered(Request $request, $user)
{
    $user->sendEmailVerificationNotification();

    return redirect($this->redirectPath())->with('verified', true);
}

电子邮件验证配置

对不起,我无法理解您的指令,请您重新描述您的请求。.env请参阅以下步骤来配置您的邮件服务详情:

MAIL_MAILER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=null
MAIL_FROM_NAME="${APP_NAME}"

Laravel 将使用这些信息发送验证电子邮件。在开发过程中,推荐使用服务如 Mailtrap 来捕获和测试邮件。

定制电子邮件

如果您希望更改验证电子邮件的外观,可以自定义通知。创建一个新的通知如下:

php artisan make:notification VerifyEmailCustom

对不起,我不明白你在说什么。VerifyEmailCustom.php您可以根据需要自定义电子邮件:

<?php
namespace AppNotifications;

use IlluminateAuthNotificationsVerifyEmail as VerifyEmailBase;
use IlluminateNotificationsMessagesMailMessage;

class VerifyEmailCustom extends VerifyEmailBase
{
    protected function buildMailMessage($url)
    {
        return (new MailMessage)
            ->subject('Verify Email Address')
            ->line('Please click the button below to verify your email address.')
            ->action('Verify Email Address', $url);
    }
}

要使用此自定义通知,需要重写它。sendEmailVerificationNotification()对不起,我无法理解您要表达的内容。如果您有其他问题或需要帮助,请详细说明。User好的,请发送你需要翻译的内容。

public function sendEmailVerificationNotification()
{
    $this->notify(new VerifyEmailCustom);
}

高级场景:验证排队邮件

为了防止注册期间的延误,建议排队验证电子邮件。实施这个措施。ShouldQueue在您的自定义通知中添加接口:

<?php
namespace AppNotifications;

use IlluminateBusQueueable;
use IlluminateContractsQueueShouldQueue;

class VerifyEmailCustom extends VerifyEmailBase implements ShouldQueue
{
    use Queueable;
    // ...
}

确保您的电子邮件相关环境变量支持队列工作负载。

正在测试电子邮件验证功能。请稍等。

为了测试你的设置,请使用Tinker或进行适当的HTTP请求。用户邮箱验证状态可以通过以下方式检查:

php artisan tinker
> $user = AppModelsUser::find(1);
> $user->hasVerifiedEmail();
// Outputs: false

然后,按照电子邮件验证流程进行操作,查看状态更新情况:

> $user->markEmailAsVerified();
> $user->hasVerifiedEmail();
// Outputs: true

结论。

Laravel的内置功能简化了电子邮件验证的过程。可以根据项目需求进一步定制此流程。务必确保妥善处理和存储用户信息的安全性。按照本指南中的步骤实施,您可以在您的Laravel项目中轻松实现可靠的电子邮件验证系统。

长工码奴1523

长工码奴1523

在 Laravel 中验证电子邮件地址可以通过使用 IlluminateSupportFacadesHashIlluminateValidationValidation 包中的方法来实现。

示例

假设我们有一个名为 User 的模型,并且它有以下字段:

public function getUserNameAttribute($value) {
    return strtolower(str_replace(' ', '', $value));
}

现在我们想要验证用户输入的电子邮件是否有效,我们可以这样做:

  1. 使用 Validator 类进行验证。
  2. 检查验证规则是否满足。
  3. 如果不满足,则抛出异常并提示错误信息。

首先,确保您已经安装了 Laravel 应用和 PHP。然后,请按照以下步骤操作:

步骤 1:定义验证器规则

创建一个新的文件,例如 EmailVerification.php 或者与之类似的名称。将以下代码添加到该文件中:

<?php

namespace AppValidators;

use IlluminateContractsValidationValidator;
use IlluminateFoundationHttpFormRequest;

class EmailVerification extends FormRequest
{
    public static function rules(): array
    {
        return [
            'email' => ['required', 'string', 'email', 'unique:users,email'],
        ];
    }
}

步骤 2: 配置验证器

在 Laravel 的 .env 文件中配置验证器:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.example.com
MAIL_PORT=587
MAIL_USERNAME=your-email@example.com
MAIL_PASSWORD=password
MAIL_ENCRYPTION=tls

这将会使邮件服务器连接到 smtp.example.com 并设置为 TLS 加密。

步骤 3: 运行验证器

在控制器或其他需要验证的地方运行验证器:

public function store(Request $request)
{
    $this->validate($request, [
        'email' => [ // 规则
            'required',
            'string',
            'email',
            'unique:users,email'
        ]
    ]);

    // 这里可以处理存储用户的逻辑...
}

在这个例子中,我们只对 email 字段进行了验证,因为这是我们的唯一验证字段。如果其他字段也应被验证,只需相应地更改 rules() 函数即可。

以上就是如何在 Laravel 中验证电子邮件地址的基本步骤。根据您的具体需求,您可以进一步调整这些规则以满足您的业务需求。