【问题标题】:Laravel 5.7 - How can I dynamically trigger a user verification email?Laravel 5.7 - 如何动态触发用户验证电子邮件?
【发布时间】:2019-07-05 12:44:53
【问题描述】:

当我使用注册页面注册时,我收到的电子邮件中的链接可以正常工作。

当我改为使用$user->sendEmailVerificationNotification() 就像我在vendor\laravel\framework\src\Illuminate\Auth\Listeners\SendEmailVerificationNotification.php 看到的那样,它不起作用。

我收到了电子邮件,但是当我点击验证链接时,我被重定向到登录页面并且用户没有得到验证。

用例:我的系统有一个超级用户,他可以添加用户,我希望触发该电子邮件以供用户验证自己。

任何帮助将不胜感激。

【问题讨论】:

  • 感谢您提供 Laravel 版本 - 这是我用来构建答案的重要信息。
  • 您不应该登录以避免您的地址被随机人验证吗?
  • 链接使用签名的 URL。它不能被随机的人验证。

标签: php laravel


【解决方案1】:

此答案假定您已经设置了 Laravel 的 AuthenticationEmail Verification

当用户在应用程序上注册时,控制器默认使用Illuminate\Foundation\Auth\RegistersUser trait。请注意那里的register() 方法中发生的附加功能,还请注意生成了\Illuminate\Auth\Events\Registered event,这反过来又触发了listener SendEmailVerificationNotification(您当前从中获取代码的位置。)

对于您的自定义类,您可能会在其上重用 Illuminate\Foundation\Auth\RegistersUser 特征,但这可能会让人感到奇怪,因为您的类可能不是控制器,并且该特征涉及额外的控制器特定逻辑。

相反,您可以尝试从Illuminate\Foundation\Auth\RegistersUser::register() 中提取一些代码并在您的新类中使用它。

所以,类似于:

// If you do not yet have a new user object.
$user = \App\User::create([
    'name' => $data['name'],
    'email' => $data['email'],
    'password' => \Illuminate\Support\Facades\Hash::make($data['password']),
]);

// Fire the event now with the user you want to receive an email.
event(new \Illuminate\Auth\Events\Registered($user));

更多信息:

【讨论】:

  • 感谢您的回复。我确实按照您的建议进行了尝试,并且确实收到了电子邮件。但是,signedURL 链接并没有验证用户,它只是将用户重定向到登录页面。
  • 我最终不得不推出自己的解决方案。很不幸,但我花了太多时间试图弄清楚我错过了什么。再次感谢您的帮助。
  • @jabdefiant 介意分享您的自定义解决方案吗?我遇到了同样的问题,它将用户重定向到登录页面。
  • 我必须创建自己的 mailable,然后在管理员注册用户时在新控制器中触发它。 Mail::to($user->email)->send(new myVerifyMail($user, 'Verify Email Address')); mailable 创建一个签名的 URL,视图必须包含这个链接供用户点击。这可能不是处理这个问题的最佳方式,但我已经在这个问题上浪费了太多时间。
猜你喜欢
  • 1970-01-01
  • 2019-03-09
  • 2019-03-05
  • 2023-03-28
  • 1970-01-01
  • 2019-10-18
  • 2019-03-05
  • 2019-05-11
  • 1970-01-01
相关资源
最近更新 更多