Laravel 5:使用 SHA1 而不是 Bcrypt

Laravel 5: Using SHA1 instead of Bcrypt

我正在尝试扩展 laravel 5 中的默认 Bcrypt HashServiceProvider,以改用 SHA1 加密。

使用这个问题的答案:How to use SHA1 encryption instead of BCrypt in Laravel 4? and the official documentation at http://laravel.com/docs/5.0/extending#container-based-extension,我成功编写了以下代码:

app/Providers/ShaHashServiceProvider.php


    使用 App\ShaHasher;
    使用 Illuminate\Hashing\HashServiceProvider;

    class ShaHashServiceProvider 扩展了 HashServiceProvider {

        public 函数引导()
        {
            parent::boot();

            $this->app->bindShared('hash', 函数()
            {
                return 新的 ShaHasher();
            });
        }

    }

app/ShaHasher.php


    使用 Illuminate\Contracts\Hashing\Hasher 作为 HasherContract;

    class ShaHasher 实现 HasherContract {

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

        public 函数检查($value, $hashedValue, array $options = array()) {
            return $this->make($value) === $hashedValue;
        }

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

    }

app/config/app.php


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

我也在使用开箱即用的 Laravels AuthController 来处理登录。

但似乎并没有如我所愿。我第一次尝试登录时,一切正常。然后我注销了,从那以后,每次尝试登录都失败了。

我没有收到任何错误,只是收到“糟糕!您的输入有一些问题。这些凭据与我们的记录不匹配。”消息。

我想知道到底出了什么问题,哪里出了问题?希望各位大神帮帮我!

我自己解决了这个问题:-)

app/Providers/ShaHashServiceProvider.php中我覆盖了错误的方法boot(),而实际上是register()我应该覆盖。


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

    class ShaHashServiceProvider extends HashServiceProvider {

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

    }