拒绝在 Laravel 后重设密码

Deny password reset in Laravel

我正在尝试向 Laravel 中的自定义密码 reset logic 添加规则。 我不想让所有用户重设密码并获得对应用程序的访问权限,因为其中一些用户已被暂停。

我在 Laravel 中创建了新的 rule 以确保这一点,但我不知道将它放在哪里。 我想在这些用户输入电子邮件并点击 "send me password reset link" 后立即对其进行验证 所以他们甚至不会收到重置密码电子邮件

我应该把这个逻辑放在哪里?我试图将它放在 Http/Controllers/Auth/ResetPasswordController.php 的构造函数中,但没有成功。

谢谢

您可以执行以下操作:

ForgotPasswordController class 是控制是否发送电子邮件的人。它实现了 SendsPasswordResetEmails 特征,如下所示:

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;

// Adds SendsPasswordResetEmails to the scope
use Illuminate\Foundation\Auth\SendsPasswordResetEmails;

class ForgotPasswordController extends Controller
{
    [...]
    // It uses the SendsPasswordResetEmails Trait
    use SendsPasswordResetEmails;

这个特性实现了一些方法:showLinkRequestForm()(显示密码重置视图),还有一个是对您很重要validateEmail()方法,检查电子邮件是否有效.

您可以像这样在 SendsPasswordResetEmails 中覆盖它:

namespace App\Http\Controllers\Auth;

// You will have to add the Request class to the scope
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ResetsPasswords;

class ResetPasswordController extends Controller
{
[...]

protected function validateEmail(Request $request)
    {
        $this->validate($request, [
            // Pass an instance of your rule to the validation array
            'email' => ['required|email', new YourSpecificRuleHere]
        ]);
    }

这应该可以解决问题,如果电子邮件不适用规则,表单将 return 消息 "Your account has been suspended"。只是不要忘记使用请求 class,如上一个脚本的开头所示!

希望对您有所帮助!