2015-03-11 21 views
6

Sto cercando di estendere il Bcrypt HashServiceProvider predefinito in laravel 5, per utilizzare invece la crittografia SHA1.Laravel 5: utilizzo di SHA1 invece di Bcrypt

Utilizzando la risposta da questa domanda: How to use SHA1 encryption instead of BCrypt in Laravel 4? e la documentazione ufficiale a http://laravel.com/docs/5.0/extending#container-based-extension, I'v riuscito a cucinare il seguente codice:

In app/fornitori/ShaHashServiceProvider.php

 

    use App\ShaHasher; 
    use Illuminate\Hashing\HashServiceProvider; 

    class ShaHashServiceProvider extends HashServiceProvider { 

     public function boot() 
     { 
      parent::boot(); 

      $this->app->bindShared('hash', function() 
      { 
       return new ShaHasher(); 
      }); 
     } 

    } 

In app/ShaHasher.php

 

    use Illuminate\Contracts\Hashing\Hasher as HasherContract; 

    class ShaHasher implements HasherContract { 

     public function make($value, array $options = array()) { 
      $value = env('SALT', '').$value; 
      return sha1($value); 
     } 

     public function check($value, $hashedValue, array $options = array()) { 
      return $this->make($value) === $hashedValue; 
     } 

     public function needsRehash($hashedValue, array $options = array()) { 
      return false; 
     } 

    } 

In app/config/app.php

 

    'providers' => [ 
      ... 
      //'Illuminate\Hashing\HashServiceProvider', 
      'App\Providers\ShaHashServiceProvider', 
      ... 
    ], 

Sto anche utilizzando Laravels out-of-the-box AuthController per gestire gli account di accesso.

Ma sembra che non funzioni come volevo. La prima volta che ho provato ad accedere, tutto ha funzionato perfettamente. Poi ho disconnesso e da allora ogni tentativo di accesso è fallito.

Non ricevo errori, solo "Whoops! Ci sono stati alcuni problemi con il tuo input. Queste credenziali non corrispondono ai nostri record." messaggio.

Mi chiedo cosa esattamente cosa sia andato storto e dove? Spero che alcuni di voi geni possano aiutarmi!

+2

Perché? SHA1 non è molto sicuro. – lukasgeiter

+0

@lukasgeiter - Sto migrando una vecchia app CakePHP (che usa SHA1) in Laravel 5. – TheNish

+1

Quindi proverei a migrare effettivamente le password a bcrypt. [Questa risposta descrive come potrebbe funzionare tale processo di migrazione] (http://stackoverflow.com/a/28519426/1903366) – lukasgeiter

risposta

6

I'v risolto il problema io stesso :-)

In app/fornitori/ShaHashServiceProvider.php ho overrided il metodo sbagliato boot(), quando era in realtà il metodo register() avrei ignorato.

 

    use App\ShaHasher; 
    use Illuminate\Hashing\HashServiceProvider; 

    class ShaHashServiceProvider extends HashServiceProvider { 

     public function register() 
     { 
      $this->app->singleton('hash', function() { return new ShaHasher; }); 
     } 

    }