laravel 自定义邮箱验证过期时间

36 篇文章 0 订阅

使用像 Laravel 这样的框架的最大好处之一是许多常见的用例或问题已经得到解决;邮箱验证也不例外。

从 Laravel 5.7 开始,可以使用 Laravel 开箱即用地实现电子邮件验证 wpcmf cms

我假设您已经拥有此设置并在您自己的环境中工作。

默认情况下,Laravel 发出的验证邮件将在60 分钟后过期。在某些情况下这可能没问题,但在我的情况下这没有任何实际用途。用户抱怨他们点击了链接,只是因为它不起作用,而且由于旧链接过期,他们不得不请求新的验证电子邮件。

要解决这个问题,有两种解决方案,更新配置的过期时间,或者重写生成验证 URL 的方法。

更新配置的过期时间

这是 Laravel 5.8 中引入的功能,所以如果你还在使用 Laravel 5.7,请跳到下一节。

如果我们检查,Illuminate\Auth\Notifications\VerifyEmail我们可以看到该verificationUrl方法如下所示:

protected function verificationUrl($notifiable)
{
    return URL::temporarySignedRoute(
        'verification.verify',
        Carbon::now()->addMinutes(Config::get('auth.verification.expire', 60)),
        [
            'id' => $notifiable->getKey(),
            'hash' => sha1($notifiable->getEmailForVerification()),
        ]
    );
}

正如您在上面看到的,在生成临时签名路由时,框架会尝试在 处获取一个配置变量,auth.verification.expire如果找不到,则会回退到 60 分钟。

如果您仍想在验证 URL 中包含过期时间,则只需将过期时间的配置设置添加到您的config/auth.php文件中,如下所示:

'verification' => [
    'expire' => 525600, // One year in minutes - enter as many minutes as you would like here
],

覆盖验证 URL 的生成

就我而言,我不想只更新过期时间,我想完全删除它;赞成简单的签名路线。

为此,我们只需要扩展VerifyEmail类并覆盖verificationUrl方法。

我在我的项目中有一个名为的目录,Core我将所有助手、自定义类和一般应用程序逻辑放在其中,这些逻辑在逻辑上不适合其他任何地方。您可能有一个类似的目录或不同的地方,您希望放置此代码;因此,请酌情替换。

添加新文件App/Core/Auth/VerifyEmail.php

用以下内容填充此文件:

<?php
 
namespace App\Core\Auth;
 
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\URL;
 
class VerifyEmail extends \Illuminate\Auth\Notifications\VerifyEmail
{
    protected function verificationUrl($notifiable)
    {
        return URL::signedRoute(
            'verification.verify',
            [
                'id' => $notifiable->getKey(),
                'hash' => sha1($notifiable->getEmailForVerification()),
            ]
        );
    }
}

更新您的User模型以覆盖sendEmailVerificationNotification使用上面新创建的类的方法:

/**
 * Send the email verification notification.
 *
 * @return void
 */
public function sendEmailVerificationNotification()
{
    $this->notify(new \App\Core\Auth\VerifyEmail);
}

瞧!现在将使用您自定义的验证 URL 生成您的电子邮件验证电子邮件

在我上面的例子中,我仍然想要一个签名的路由,以便我可以验证验证 URL 没有被篡改,但是你可以用你想要的任何方式替换它来生成 URL。例如,让我们从我的第一种方法中实现一年超时;只需更新verificationUrl为:

protected function verificationUrl($notifiable)
    {
        return URL::temporarySignedRoute(
            'verification.verify',
            Carbon::now()->addMinute(525600),
            [
                'id' => $notifiable->getKey(),
                'hash' => sha1($notifiable->getEmailForVerification()),
            ]
        );
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rorg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值