Laravel Passport自定义哈希器创建令牌

时间:2018-10-03 13:05:41

标签: laravel laravel-5

我已经将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?或任何其他帮助解决此问题的方法。

3 个答案:

答案 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',