laravel - 如何创建重置密码令牌并使用邮件而不是通知发送电子邮件?
问题描述
我有一个电子邮件控制器,我正在其中准备要发送的所有电子邮件。
当我发送电子邮件时,我通常使用如下方法:
class EmailController extends Controller
{
public function messageReceived(Request $request)
{
$request->validate([
'email' => 'email:rfc,dns',
'body' => 'required',
]);
Mail::to('john.doe@foo.com')->send(
new MessageReceived(
$request->email,
$request->body
)
);
}
}
对于我当前使用的重置密码电子邮件,我已将以下方法添加到此类:
public function resetPassword(Request $request)
{
$request->validate(['email' => 'required|email|exists:myconnection.users,email']);
$status = Password::broker('users:myconnection')->sendResetLink(
$request->only('email')
);
return $status === Password::RESET_LINK_SENT
? response()->json(['status' => __($status)])
: response()->json(['email' => __($status)]);
}
如何创建令牌并使用Mail::to()->send()
而不是发送通知sendResetLink()
?
解决方案
Password
你可以通过 Laravel 的门面手动生成密码重置令牌。
// populate user
$user = User::whereEmail($request->email)->first();
// generate token
$token = \Illuminate\Support\Facades\Password::getRepository()->create($user);
然后,您可以将令牌传递给自定义邮件程序。
$data = [
'token' => $token,
// ...
];
Mail::to($user)->send(new PasswordResetMailer($data));
回应您的评论:
您可以在生成令牌期间设置自定义代理。
$token = Password::broker('your_custom_broker')->getRepository()->create($user);
推荐阅读
- mongodb - 如何使用 ObjectId 作为本地字段访问相邻的 Mongo 集合的字符串类型文档作为外部字段
- wordpress - 如何在 WordPress 中创建可以动态更改数据的自定义卡片数组
- python - urllib.error.HTTPError:HTTP 错误 404:未找到(雅虎财经)
- python - Python:计算当前时间和上次登录之间的时间。(自动通讯)
- c# - system.text.json 搜索动态 json
- linear-regression - R中带有pglm包的伪R2。(具有固定效应模型的泊松回归)
- gruntjs - 为什么 PurgeCSS 不处理所有指定的文件?
- azure - 将加密包从 azure blob 容器迁移到 Sharepoint 时出错
- javascript - 在nodejs中没有异步调用第二个函数
- python - 通用递归函数