class LoginController extends Controller
{
#overwrite trait AuthenticatesUsers->credentials
protected function credentials(Request $request)
{
return array_merge( $request->only($this->username(), 'password'), ['active' => 1]);
}
}
class ForgotPasswordController extends Controller
{
//try to overwrite here
}
\vendor\laravel\framework\src\Illuminate\Auth\Passwords\PasswordBroker.php
class PasswordBroker implements PasswordBrokerContract
{
if (is_null($user) || $user->active != 1) { <-- add $user->active != 1
return static::INVALID_USER;
}
}
我通过添加电子邮件自定义Laravel注册/登录系统&#39;有效&#39;列。
在我的登录控制器中,我覆盖trait以检查活动列,但我在重置密码时遇到问题。
我现在所做的是将$user->active !=1
添加到PaswordBroker
中,它运行正常,但
我不想触及供应商的文件,我希望在我的控制器中覆盖它。
谁知道如何实现这个目标?答案 0 :(得分:1)
它是在类的sendResetLinkEmail
中完成的,请像这样覆盖:
public function sendResetLinkEmail(Request $request)
{
$this->validate($request, [
'email' => 'required|email',
]);
$response = $this->broker()->sendResetLink([
'email' => $request->input('email'),
'active' => true,
]);
return $response == Password::RESET_LINK_SENT
? $this->sendResetLinkResponse($response)
: $this->sendResetLinkFailedResponse($request, $response);
}
答案 1 :(得分:0)
如果你想要,尝试重新初始化一个新的类扩展PasswordBroker,之后尝试覆盖方法(将你的条件添加到...那个方法)。
class YourClass extends PasswordBroker
{
public function sendResetLink(array $credentials, Closure $callback = null)
{
$user = $this->getUser($credentials);
if (is_null($user) || $user->active != 1) {
return PasswordBrokerContract::INVALID_USER;
}
$token = $this->tokens->create($user);
$this->emailResetLink($user, $token, $callback);
return PasswordBrokerContract::RESET_LINK_SENT;
}
}
我不知道您使用的是Laravel版本,我使用的是5.2。
希望这有帮助!