2016-12-18 58 views
1
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註冊/登錄系統通過添加電子郵件'active'列。Laravel在發送重置鏈接前重置密碼檢查額外的活動列

在我的登錄控制器中,我覆蓋trait來檢查活動列,但我在重置密碼時遇到了問題。

我做了什麼,現在是我添加$user->active !=1PaswordBroker,它工作正常,但

我不想碰供應商的文件,我想將其覆蓋在我的控制器。

有人知道如何做到這一點嗎?

回答

1

如果你想這樣做,嘗試重新初始化一個新的類擴展PasswordBroker,然後嘗試overrite方法(將你的條件添加到...方法)。

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。

希望得到這個幫助!