RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1292414
Accepted
Владлен Вожжаев
Владлен Вожжаев
Asked:2022-06-06 22:39:41 +0000 UTC2022-06-06 22:39:41 +0000 UTC 2022-06-06 22:39:41 +0000 UTC

更改 Laravel 8 加密算法

  • 772

同事,有一个用户表,它是用来SHA256加密密码的。您必须使用此密码在 laravel 中进行授权。

Laravel 8 使用Auth::attempt($credentials).

如果密码在数据库中以 SHA256 加密,如何使用 Auth 门面实现授权?

laravel
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Владлен Вожжаев
    2022-06-07T02:48:01Z2022-06-07T02:48:01Z

    抽了三个小时,我终于实现了文档。要进行这样的假动作,您需要

    1. 就其本身而言,应该有一个带有用户的表格模型。

    2. 接下来,您需要创建自己的提供程序来实现这些方法UserProvider

      class CustomUserProvider implements UserProvider
       {
           protected $model;
           public function __construct($model)
           {
               $this->model = $model;
           }
           public function retrieveById($identifier): GenericUser
           {
               // тут ещё предстоит работа
           }
      
           public function retrieveByToken($identifier, $token)
           {
               return null;
           }
      
           public function updateRememberToken(Authenticatable $user, $token)
           {
           }
      
           public function retrieveByCredentials(array $credentials)
           {
               if (! array_key_exists('name', $credentials)) {
                   return null;
               }
               $query = $this->newModelQuery();
               foreach ($credentials as $key => $value) {
                   if (Str::contains($key, 'pass')) {
                       continue;
                   }
      
                   if (is_array($value) || $value instanceof Arrayable) {
                       $query->whereIn($key, $value);
                   } else {
                       $query->where($key, $value);
                   }
               }
               $userArray = $query->first()->getAttributes();
               // GenericUser is a class from Laravel Auth System
               return new GenericUser($userArray);
           }
      
           public function validateCredentials(Authenticatable $user, array $credentials): bool
           {
               if (! array_key_exists('pass', $credentials)) {
                   return false;
               }
               // Тут алгоритм проверки пароля.
               if ($user->getAuthPassword() == hash(64,$credentials['pass'],false)) return true;
               return false;
           }
           protected function newModelQuery($model = null)
           {
               return is_null($model)
                   ? $this->createModel()->newQuery()
                   : $model->newQuery();
           }
      
           /**
            * Create a new instance of the model.
            *
            * @return \Illuminate\Database\Eloquent\Model
            */
           public function createModel(): \Illuminate\Database\Eloquent\Model
           {
               $class = '\\'.ltrim($this->model, '\\');
      
               return new $class;
           }
       }
      
    3. 接下来,我们将其注册到Providers/AuthServiceProvider.php

      Auth::provider('customuserprovider', function ($app, array $config) {
           return new CustomUserProvider($config['model']);
      
       });
      
    4. 接下来,将其添加到配置中config/auth.php

      'providers' => [
          'users' => [
              'driver' => 'customuserprovider',
              'model' => App\Models\User::class,
              'table' => 'TABLE_NAME',
          ],
      ],
      
    • 0

相关问题

  • 如何从另一个控制器访问任意控制器

  • 以用户身份运行队列

  • 在刀片 laravel 中使用 Vue.js

  • 为什么要在项目中使用 SoftDeletes?

  • 批量填写 Laravel

  • 如何在 Blade Laravel 中加载不同的表单?

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    表格填充不起作用

    • 2 个回答
  • Marko Smith

    提示 50/50,有两个,其中一个是正确的

    • 1 个回答
  • Marko Smith

    在 PyQt5 中停止进程

    • 1 个回答
  • Marko Smith

    我的脚本不工作

    • 1 个回答
  • Marko Smith

    在文本文件中写入和读取列表

    • 2 个回答
  • Marko Smith

    如何像屏幕截图中那样并排排列这些块?

    • 1 个回答
  • Marko Smith

    确定文本文件中每一行的字符数

    • 2 个回答
  • Marko Smith

    将接口对象传递给 JAVA 构造函数

    • 1 个回答
  • Marko Smith

    正确更新数据库中的数据

    • 1 个回答
  • Marko Smith

    Python解析不是css

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5