我在Laravel中设置了密码重设。我已经阅读了文档https://laravel.com/docs/5.5/passwords,但是如果有一个函数只允许基于users表中数据库中的字段的某些用户的重置密码,我无法看到。
在我的用户表中,如果user_type
设置为2,我已添加字段user_type
我不想允许为该用户发送密码重置链接
答案 0 :(得分:3)
在Http/Controllers/Auth/ForgotPasswordController.php
中使用特征SendsPasswordResetEmails
。
您可以覆盖ForgotPasswordController中的函数sendResetLinkEmail
并在那里添加条件。
public function sendResetLinkEmail(Request $request)
{
$user = User::where('email', $request->get('email'))->get();
if (!$user || $user->user_type == 2) {
return redirect()->back()->with('error' => '...');
}
//rest of function
$this->validateEmail($request);
$response = $this->broker()->sendResetLink(
$request->only('email')
);
return $response == Password::RESET_LINK_SENT
? $this->sendResetLinkResponse($response)
: $this->sendResetLinkFailedResponse($request, $response);
}
答案 1 :(得分:1)
Dimitri's Answer很好而且很正确。谢谢。
但是有一种避免代码重复的方法:不用复制原始代码,只需在完成自定义代码后调用trait的方法即可。
在您的ForgotPasswordController中,将use SendsPasswordResetsEmails;
替换为
use SendsPasswordResetEmails {
// make the trait's method available as traitSendResetLinkEmail
sendResetLinkEmail as public traitSendResetLinkEmail;
}
然后按如下所示编写sendResetLinkEmail
:
$this->validateEmail($request);
$user = User::where('email', $request->get('email'))->get();
if (!$user || $user->user_type == 2) {
return redirect()->back()->with('error' => '...');
}
// call the original method
$this->traitSendResetLinkEmail($request);