Laravel不允许为某些用户角色重置密码

时间:2018-04-14 20:03:06

标签: laravel

我在Laravel中设置了密码重设。我已经阅读了文档https://laravel.com/docs/5.5/passwords,但是如果有一个函数只允许基于users表中数据库中的字段的某些用户的重置密码,我无法看到。

在我的用户表中,如果user_type设置为2,我已添加字段user_type我不想允许为该用户发送密码重置链接

2 个答案:

答案 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);