2016-11-10 11 views
8

laravel의 암호 중개자에서 사용되는 기능을 무시하는 방법을 아는 사람 있습니까?Laravel 5.3 Password Broker 사용자 지정

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

는 전망과 몇 표면 수준의 것들과 같은 것들을 위해 무엇을해야하는지에 대한 정보를 제공하지만 명확 전혀 정말 아니에요 또는 어쩌면 나는 충분한 시간을 읽는 아니에요 : 나는 문서를 알고있다.

나는 이미 ResetsPasswords.php 형질을 재정의하는 방법을 알고 있지만, Password::broker()의 기능을 무시하는 것은에서 다음 층을위한 것입니다.

내가 친절하게 몇 가지를 제공 할 수 있습니다 필요한 추가 정보가있는 경우.

미리 감사드립니다.

답변

9

같은 문제에 직면했을 때 PasswordBroker 기능 중 일부를 재정의해야했습니다. 웹 많은 실패한 시도에 대한 조사를 많이 그렇게 할 후에, 나는 다음과 같은 구현 결국 : 나는 CustomPasswordBrokerManager 인스턴스를 등록 곳에

  1. 이 앱 \ 공급자 내부 CustomPasswordResetServiceProvider을 만들었습니다. 설정에서

    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. 마지막으로 앱 \ 서비스 폴더 안에 내가에있는 기본 PasswordBroker 확장하는 CustomPasswordBroker 클래스 생성 :
    를 분명히 \ 인증을 \ 암호 \ PasswordBroker 내가 필요한 기능을 재정의 (override)됩니다.

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

이 최선의 구현하지만 나를 위해 일했다면 확실하지.

+0

이것은 매우 비슷한 구현으로 끝내 었습니다. 디렉토리와 모든 것에 대한 신분을 잘 설명합니다. +1하고 표시된 올바른! –

+1

비밀번호 재설정을 위해 필요한 비밀번호 길이를 변경하기 만하면됩니다. 6 자의 최소 길이는 래 라벨 코드에 아주 깊게 묻혀 있으므로 여기에서 답을 바꿀 수 있습니다. 정말 고맙습니다! – johnnydoe82

+1

고맙습니다.나는이 비밀 번호 중개인과 비밀 번호 중개인 관리자 엉망으로 붙어지고 있었다. 진지하게, 나는 그들이 그렇게 나쁜 방식으로 단순했던 어떤 것을 복잡하게하는지 이해할 수 없다. 또한 Laravel 5.4에서이 작업을 수행하는 사람들은 여기에 표시된 것보다 서비스 공급자의 'register' 메소드에 약간의 차이가 있습니다. 본질적으로,'registerPasswordBroker' 메쏘드는 자신 만의 커스텀 CustomPasswordBrokerManager 인스턴스를 사용하는 부분을 제외하고는'Illuminate \ Auth \ Passwords \ PasswordResetServiceProvider'와 같이 복사되어야합니다. – racl101