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


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

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

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

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

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

    更新配置的过期时间

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

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

    1. protected function verificationUrl($notifiable)
    2. {
    3. return URL::temporarySignedRoute(
    4. 'verification.verify',
    5. Carbon::now()->addMinutes(Config::get('auth.verification.expire', 60)),
    6. [
    7. 'id' => $notifiable->getKey(),
    8. 'hash' => sha1($notifiable->getEmailForVerification()),
    9. ]
    10. );
    11. }

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

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

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

    覆盖验证 URL 的生成

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

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

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

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

    用以下内容填充此文件:

    1. namespace App\Core\Auth;
    2. use Illuminate\Support\Carbon;
    3. use Illuminate\Support\Facades\URL;
    4. class VerifyEmail extends \Illuminate\Auth\Notifications\VerifyEmail
    5. {
    6. protected function verificationUrl($notifiable)
    7. {
    8. return URL::signedRoute(
    9. 'verification.verify',
    10. [
    11. 'id' => $notifiable->getKey(),
    12. 'hash' => sha1($notifiable->getEmailForVerification()),
    13. ]
    14. );
    15. }
    16. }

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

    1. /**
    2. * Send the email verification notification.
    3. *
    4. * @return void
    5. */
    6. public function sendEmailVerificationNotification()
    7. {
    8. $this->notify(new \App\Core\Auth\VerifyEmail);
    9. }

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

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

    1. protected function verificationUrl($notifiable)
    2. {
    3. return URL::temporarySignedRoute(
    4. 'verification.verify',
    5. Carbon::now()->addMinute(525600),
    6. [
    7. 'id' => $notifiable->getKey(),
    8. 'hash' => sha1($notifiable->getEmailForVerification()),
    9. ]
    10. );
    11. }

  • 相关阅读:
    微信小程序进阶(1)--自定义组件
    【Redis在Windows中与Linux中的下载安装,启动服务和设置密码远程连接】
    “乘风破浪”的芒果超媒,能上岸吗?
    【java】 对命名规范的思考——VO,BO,PO,DO,DTO是什么
    从网站流量指标开始,CSDN 如何洞察运营效果异动?丨评测来了
    CodeTON Round 3 (C.差分维护,D.容斥原理)
    半年总结-忙碌中的思考
    什么是java的流程控制语句,java又有哪些流程控制语句
    使用Docker构建、共享和运行WebAssembly应用程序
    速卖通测评自养号,国外环境如何搭建?需要多少成本?
  • 原文地址:https://blog.csdn.net/lemqs0123/article/details/127954971