2016-11-10 84 views
8

有誰知道如何覆蓋laravel密碼經紀人使用的功能?我知道文檔:Laravel 5.3密碼經紀人定製

https://laravel.com/docs/5.3/passwords#resetting-views

給什麼就搞什麼看法和一些表面層次的東西做的信息,但目前還不清楚在所有真正也許我沒有讀它足夠的時間。

我已經知道如何重寫ResetsPasswords.php特質,但重寫Password::broker()的功能是爲下一層。

如果有需要,我可以請提供一些更多的信息。

預先感謝您。

回答

9

我不得不面對相同的問題,需要重寫一些PasswordBroker函數。經過大量的網頁和許多失敗的嘗試對調查的話,我結束了以下實現:

  1. 創建一個CustomPasswordResetServiceProvider軟件\供應商裏面,我註冊了一個CustomPasswordBrokerManager實例。

    namespace App\Providers; 
    use Illuminate\Support\ServiceProvider; 
    use App\Services\CustomPasswordBrokerManager; 
    class CustomPasswordResetServiceProvider extends ServiceProvider{ 
        protected $defer = true; 
    
        public function register() 
        { 
         $this->registerPasswordBrokerManager(); 
        } 
    
        protected function registerPasswordBrokerManager() 
        { 
         $this->app->singleton('auth.password', function ($app) { 
          return new CustomPasswordBrokerManager($app); 
         }); 
        } 
    
        public function provides() 
        { 
         return ['auth.password']; 
        } 
    } 
    
  2. 配置/ app.php註釋行:
    //Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,
    並加入:
    App\Providers\CustomPasswordResetServiceProvider::class,

  3. 內部應用\服務文件夾中創建一個CustomPasswordBrokerManager和複製的上下文的默認PasswordBrokerManager位於:
    照亮\身份驗證\密碼\ PasswordBrokerManager.php
    然後修改功能決心給我回CustomPasswordProvider類的一個實例。

    protected function resolve($name) 
    { 
        $config = $this->getConfig($name); 
        if (is_null($config)) { 
         throw new InvalidArgumentException("Password resetter [{$name}] is not defined."); 
        } 
    
        return new CustomPasswordBroker(
         $this->createTokenRepository($config), 
         $this->app['auth']->createUserProvider($config['provider']) 
    ); 
    } 
    
  4. 最後內部應用程序\ Services文件夾我創建了一個CustomPasswordBroker類擴展默認PasswordBroker位於:
    照亮\身份驗證\密碼\ PasswordBroker和重寫,我需要的功能。

    use Illuminate\Auth\Passwords\PasswordBroker as BasePasswordBroker;  
    
    class CustomPasswordBroker extends BasePasswordBroker  
    {  
    // override the functions that you need here  
    }  
    

不知道這是最好的實現,但它爲我工作。

+0

這是一個非常類似的實現,我最終做了。很好解釋與目錄和所有的標識。 +1並標記爲正確! –

+1

只需更改密碼重置所需的密碼長度。 6個字符的最小長度在laravel代碼中埋藏得很深,這樣我只能在這裏用你的答案改變它。非常感謝! – johnnydoe82

+1

謝謝你。我被這個密碼代理和密碼代理管理器弄得一團糟。說真的,我無法理解它們是如何使以前很簡單的東西變得複雜,如此糟糕。 另外,對於在Laravel 5.4上執行此操作的人員,服務提供者的「註冊」方法與此處顯示的內容略有不同。實質上,'registerPasswordBroker'方法應該複製到'Illuminate \ Auth \ Passwords \ PasswordResetServiceProvider'上,除了使用自定義'CustomPasswordBrokerManager'實例的部分。 – racl101