2015-03-11 27 views
6

Tôi đang cố gắng mở rộng Bcrypt HashServiceProvider mặc định trong laravel 5, để sử dụng mã hóa SHA1 thay thế.Laravel 5: Sử dụng SHA1 thay vì Bcrypt

Sử dụng câu trả lời từ câu hỏi này: How to use SHA1 encryption instead of BCrypt in Laravel 4? và các tài liệu chính thức tại http://laravel.com/docs/5.0/extending#container-based-extension, I'v quản lý để nấu lên đoạn mã sau:

Trong app/nhà cung cấp/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(); 
      }); 
     } 

    } 

Trong ứng dụng/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; 
     } 

    } 

Trong app/config/app.php

 

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

Tôi cũng đang sử dụng Laravels out-of-the-box AuthController để xử lý thông tin đăng nhập.

Nhưng có vẻ như nó không hoạt động như tôi dự định. Lần đầu tiên tôi cố gắng đăng nhập, mọi thứ hoạt động hoàn toàn tốt đẹp. Sau đó, tôi đăng xuất, và kể từ đó, mọi nỗ lực đăng nhập đã thất bại.

Tôi không nhận được bất kỳ lỗi nào, chỉ cần "Rất tiếc! Đã xảy ra sự cố với thông tin của bạn. Những thông tin này không khớp với hồ sơ của chúng tôi.".

Tôi tự hỏi chính xác điều gì đã xảy ra và ở đâu? Tôi hy vọng một số bạn thiên tài có thể giúp tôi!

+2

Tại sao? SHA1 không an toàn lắm. – lukasgeiter

+0

@ lukasgeiter - Tôi đang di chuyển một ứng dụng CakePHP cũ (sử dụng SHA1) sang Laravel 5. – TheNish

+1

Sau đó, tôi sẽ cố gắng di chuyển các mật khẩu để bcrypt. [Câu trả lời này mô tả cách thức quá trình di chuyển này có thể hoạt động như thế nào] (http://stackoverflow.com/a/28519426/1903366) – lukasgeiter

Trả lời

6

I'v giải quyết vấn đề bản thân mình :-)

Trong app/nhà cung cấp/ShaHashServiceProvider.php tôi overrided phương pháp sai boot(), khi nó được trong thực tế phương pháp register() tôi nên đã ghi đè.

 

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

    class ShaHashServiceProvider extends HashServiceProvider { 

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

    } 

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