【问题标题】:Laravel Passport custom hasher to create tokenLaravel Passport 自定义哈希以创建令牌
【发布时间】:2019-03-08 17:22:24
【问题描述】:

我使用 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?或解决此问题的任何其他帮助。

【问题讨论】:

  • 它明确表示UserRepository::__construct() must be an instance of Illuminate\Hashing\HashManager 所以传递UserRepositroy的变量实例。
  • @Iftikharuddin 我知道它为什么会出错,我的问题是如何覆盖 userrepositry 并强制它使用我的自定义哈希,即 SHAHasher
  • 简单来说,我的问题是如果您使用 Laravel-Custom-Hashing 那么如何将其用于护照。因为它在使用我已经使用自定义更改的 hashManager 创建令牌时验证凭据。我无法传递 hashManager 实例。
  • 如果你想覆盖我认为你需要用一个变量替换基本代码。例如,如果在基本代码中有 Class instance 作为参数,那么只需将其替换为 variable。试试这个,让我知道。
  • 我不想更改基本代码,因为这不是最佳实践。但是是的,我已经尝试通过更改基本代码,它显然有效。感谢您抽出宝贵时间,让我知道我是否可以在不更改基本代码的情况下实现。

标签: laravel laravel-5


【解决方案1】:

您还可以使用 HashManager 上的 extend 方法创建自定义散列器并使用自定义散列扩展现有的 HashManager

在 AuthServiceProvider 中:

$this->app->get('hash')->extend('custom_hasher', function(){
    return new CustomHasher();
});

在 hash.php 配置文件中,您可以更改哈希驱动程序:

'driver' => 'custom_hasher',

【讨论】:

    【解决方案2】:

    我们遇到了与此处描述的问题相同的问题,我正在开发一个 Laravel API,它需要处理 Passport 并且还有它自己的自定义哈希 (SHA1)。喜欢here中的那个

    我们对此的解决方法不仅是让我们的类 ShaHasher 扩展 HashManager 像这样:

    class ShaHasher extends HashManager implements Hasher { ..... }
    

    您还需要确保此 Hasher 的提供程序在构造函数中获取 $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);
           });
        }
    
    }
    

    希望这对某人有所帮助!

    【讨论】:

    • 作为最后一点,我们的 Laravel 版本目前是 5.8.19
    • 非常感谢。它对我有帮助
    【解决方案3】:

    找到解决方案:

    我使用我的自定义哈希 (SHAHasher) 而不是 Passport hashManager,现在扩展护照的 HashManager 而不是完整的新哈希 (SHAHasher)。所以现在即使我正在发送 SHAHasher(自定义),它也可以接受,因为我的 SHAHasher 扩展了 hashManager。

    在自定义哈希库中扩展 hashManager。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-24
      • 2010-10-22
      • 2018-06-02
      • 1970-01-01
      • 1970-01-01
      • 2012-04-10
      • 2020-01-15
      • 2021-03-03
      相关资源
      最近更新 更多