2016-11-10 22 views
8

Có ai biết cách ghi đè lên các chức năng được sử dụng trong môi giới mật khẩu của laravel không? Tôi biết các tài liệu:Laravel 5.3 Tùy chỉnh môi giới mật khẩu

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

Cung cấp thông tin về những việc cần làm cho những thứ như quan điểm và một vài mức độ bề mặt vật nhưng nó không rõ ràng ở tất cả thực sự hoặc có lẽ tôi sẽ không đọc nó đủ thời gian.

Tôi đã biết làm thế nào để ghi đè lên ResetsPasswords.php Trait nhưng trọng các chức năng của Password::broker() là cho các lớp tiếp theo trong.

Nếu có nhiều thông tin cần thiết tôi vui lòng có thể cung cấp một số.

Cảm ơn bạn trước.

Trả lời

9

Tôi phải đối mặt với cùng một vấn đề, cần thiết để ghi đè lên một số chức năng PasswordBroker. Sau rất nhiều cuộc điều tra trên web và nhiều lần thất bại để làm như vậy, tôi đã kết thúc việc thực hiện sau đây:

  1. Tạo một CustomPasswordResetServiceProvider bên trong App \ Providers nơi tôi đăng ký một CustomPasswordBrokerManager dụ.

    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. Trong config/app.php nhận xét ra dòng:
    //Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,
    và nói thêm:
    App\Providers\CustomPasswordResetServiceProvider::class,

  3. thư mục

    Bên trong App \ Services tạo ra một CustomPasswordBrokerManager và sao chép bối cảnh của mặc định PasswordBrokerManager tại:
    Illuminate \ Auth \ Passwords \ PasswordBrokerManager.php
    Sau đó điều chỉnh chức năng quyết trở về một thể hiện của CustomPasswordProvider lớp học của tôi.

    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. Cuối cùng trong thư mục App \ Services Tôi tạo ra một lớp CustomPasswordBroker mà mở rộng mặc định PasswordBroker nằm tại địa chỉ:
    Illuminate \ Auth \ Passwords \ PasswordBroker và ghi đè các chức năng mà tôi cần.

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

Không chắc nếu điều này là việc thực hiện tốt nhất nhưng nó làm việc cho tôi.

+0

Đây là một triển khai rất giống với việc tôi đã thực hiện. Rất tốt giải thích với việc xác định các thư mục và tất cả. +1 và được đánh dấu đúng! –

+1

Chỉ cần thay đổi độ dài mật khẩu yêu cầu để đặt lại mật khẩu. Độ dài tối thiểu 6 ký tự được ghi khá sâu trong mã laravel để tôi chỉ có thể thay đổi nó bằng câu trả lời của bạn ở đây. Cảm ơn bạn rất nhiều! – johnnydoe82

+1

Cảm ơn bạn vì điều này.Tôi đã gặp khó khăn về vấn đề này với Password Broker và Password Broker Manager. Nghiêm túc, tôi không thể hiểu được làm thế nào họ phức tạp một cái gì đó được sử dụng để được đơn giản trong một cách xấu như vậy. Ngoài ra, đối với những người làm điều này trên Laravel 5.4, có một sự khác biệt nhỏ đối với phương thức 'register' của nhà cung cấp dịch vụ so với những gì được hiển thị ở đây. Về cơ bản, phương thức 'registerPasswordBroker' phải được sao chép như trên' Illuminate \ Auth \ Passwords \ PasswordResetServiceProvider' trừ phần mà bạn sử dụng cá thể 'CustomPasswordBrokerManager' tùy chỉnh của riêng bạn. – racl101

Các vấn đề liên quan