在Laravel中拒绝密码重置

时间:2018-02-09 09:53:26

标签: php authentication laravel-5 laravel-authorization

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

我在Laravel中创建了新的rule,确保了,但我不知道放在哪里。 我想在他们输入电子邮件并点击“发送密码重置链接”后立即验证这些用户 所以他们甚至不会收到重置密码电子邮件

我把这个逻辑放在哪里?我试着把它放在Http/Controllers/Auth/ResetPasswordController.php的构造函数中,但没有运气。

谢谢

1 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

ForgotPasswordController 类是控制是否发送电子邮件的人。它实现了 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]
        ]);
    }

这应该可以解决问题,如果电子邮件不适用于规则,表单将返回消息“您的帐户已被暂停”。只是不要忘记使用最后一个脚本的begginint中指示的Request类!

希望它有所帮助!