2016-11-10 13 views
8

क्या कोई जानता है कि लार्वा के पासवर्ड ब्रोकर के भीतर उपयोग किए गए कार्यों को ओवरराइड कैसे करें? मैं डॉक्स पता:लैरवेल 5.3 पासवर्ड ब्रोकर अनुकूलन

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

क्या विचार और कुछ सतह स्तर चीज़ों जैसे खोज करने के लिए के बारे में जानकारी दें, लेकिन यह बिल्कुल सच स्पष्ट नहीं है या हो सकता है कि मैं यह पर्याप्त बार पढ़ नहीं कर रहा हूँ।

मैं पहले से ही कैसे ResetsPasswords.php विशेषता ओवरराइड करने के लिए जानते हैं, लेकिन Password::broker() की कार्यक्षमता अधिभावी में अगले परत के लिए है।

अधिक जानकारी मैं कृपया कुछ प्रदान कर सकते हैं की जरूरत है वहाँ है।

अग्रिम धन्यवाद।

उत्तर

9

मुझे पासवर्डबॉकर कार्यों में से कुछ को ओवरराइड करने के लिए आवश्यक एक ही समस्या का सामना करना पड़ा। वेब और कई असफल प्रयासों पर जांच की एक बहुत कुछ करने के बाद ऐसा करने के लिए, मैं निम्नलिखित कार्यान्वयन के लिए समाप्त हो गया:

  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. config में/app.php लाइन बाहर टिप्पणी की:
    //Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,
    और कहा:
    App\Providers\CustomPasswordResetServiceProvider::class,

  3. अंदर अनुप्रयोग \ सेवा फ़ोल्डर एक CustomPasswordBrokerManager बनाया है और संदर्भ की नकल की डिफ़ॉल्ट पासवर्डबॉकर प्रबंधक पर स्थित:
    रोशन \ प्रमाणीकरण \ पासवर्ड \ 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. अंत में अनुप्रयोग \ सेवाएं फ़ोल्डर के अंदर मैं एक 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 वर्णों की न्यूनतम लंबाई काफी गहरी हो गई है ताकि मैं इसे केवल आपके उत्तर के साथ बदल सकूं। आपको बहुत - बहुत धन्यवाद! – johnnydoe82

+1

इसके लिए धन्यवाद।मैं इस पासवर्ड ब्रोकर और पासवर्ड ब्रोकर प्रबंधक गड़बड़ के साथ अटक गया था। गंभीरता से, मैं समझ नहीं पा रहा हूं कि उन्होंने ऐसा कुछ जटिल कैसे किया जो इस तरह के बुरे तरीके से सरल होता था। इसके अलावा, लार्वेल 5.4 पर ऐसा करने वाले लोगों के लिए यहां दिखाए गए सेवा प्रदाता की 'रजिस्टर' विधि के लिए थोड़ा अंतर है। अनिवार्य रूप से, 'रजिस्टरपैसबुक ब्रोकर' विधि को उस भाग को छोड़कर 'रोशनी \ Auth \ Passwords \ passwordResetServiceProvider' पर कॉपी किया जाना चाहिए, जहां आप अपने स्वयं के कस्टम' कस्टमपासवर्ड ब्रोकर प्रबंधक 'उदाहरण का उपयोग करते हैं। – racl101

संबंधित मुद्दे