我已经将SHA1哈希用于这样的密码: https://arjunphp.com/laravel-5-sha1-encryption-instead-of-bcrypt/
现在我正在使用护照API创建令牌,但是由于哈希器现在已更改,因此不允许我创建令牌。
Symfony \ Component \ Debug \ Exception \ FatalThrowableError:传递给Laravel \ Passport \ Bridge \ UserRepository :: __ construct()的参数1必须是Illuminate \ Hashing \ HashManager的实例,是给定的App \ Libraries \ ShaHash \ SHAHasher的实例在第26行的文件C:\ xampp1 \ htdocs \ coursekartv2 \ vendor \ laravel \ passport \ src \ Bridge \ UserRepository.php中
如何覆盖UserRepository
以使用SHAHasher
而不是HashManager
?或任何其他帮助解决此问题的方法。
答案 0 :(得分:1)
找到解决方案:
我使用的是自定义哈希器(SHAHasher)而不是Passport hashManager,现在扩展了护照的HashManager而不是完整的新哈希器(SHAHasher)。因此,现在即使我发送的是SHAHasher(自定义),它也在接受,因为我的SHAHasher扩展了hashManager。
在自定义哈希器库中扩展hashManager。
答案 1 :(得分:1)
我们遇到了与此处描述的问题相同的问题,我正在开发一个Laravel API,该API需要处理Passport并拥有自己的自定义Hasher(SHA1)。就像here
中的那个我们的解决方法不仅是使我们的类ShaHasher扩展HashManager 像这样:
class ShaHasher extends HashManager implements Hasher { ..... }
您还需要确保此Hasher get的提供程序以及$ app容器在构造函数中的实例,像这样:
<?php
namespace App\Providers;
use Illuminate\Hashing\HashServiceProvider;
use Psytech\ShaHasher;
class ShaHashServiceProvider extends HashServiceProvider {
public function register()
{
$this->app->singleton('hash', function () {
return new ShaHasher($this->app);
});
}
}
希望这对某人有帮助!
答案 2 :(得分:0)
您还可以使用 HashManager 上的 extend 方法创建自定义散列器并使用您的自定义散列扩展现有的 HashManager
在 AuthServiceProvider 中:
$this->app->get('hash')->extend('custom_hasher', function(){
return new CustomHasher();
});
在 hash.php 配置文件中,您可以更改哈希驱动程序:
'driver' => 'custom_hasher',