Laravel 6: пользовательские модели используют UUID вместо автоинкремента. Где обновить логи сеанса БД c? - PullRequest
0 голосов
/ 30 марта 2020

ОК, поэтому в моих моделях пользователей используется webpatser/laravel-uuid. Все миграции используют UUID.

Так что теперь моя модель выглядит так:

<?php

namespace App\Models;

use App\Models\Traits\Uuid;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Illuminate\Support\Facades\Hash;

class User extends Authenticatable
{
    use Notifiable;
    use Uuid;

    public $incrementing = false;
    public $timestamps = true;

    protected $guarded = [
        'uuid',
    ];

    protected $keyType = 'string';
    protected $primaryKey = 'uuid';
    protected $table = 'users';

    protected $dates = [
        'created_at',
        'updated_at',
    ];

    protected $hidden = [
        'password',
        'remember_token',
    ];

    public function setPasswordAttribute($password): void
    {
        $this->attributes['password'] = Hash::make($password);
    }
}

enter image description here

Я хочу использовать драйвер сеанса базы данных , Я создал сессионную таблицу через php artisan session:table. Все миграции сделаны. Очевидно, мне пришлось переименовать существующий столбец user_id. Я изменил это на user_uuid. Я знаю, что этого недостаточно, так как я не могу найти logi c, ответственный за заполнение этой таблицы базы данных. Я думаю, это где-то в vendor (Подсветка).

Где находится логика c для заполнения моего столбца сеанса не по умолчанию?

enter image description here

Теперь каждое открытое окно дает:

enter image description here

Итак, я знаю, в чем проблема, что ее вызывает, как ее изменить, но я не знаю с чего начать. Спасибо за любые подсказки.

1 Ответ

0 голосов
/ 30 марта 2020

Думаю, вам будет полезен пользовательский обработчик сеанса, поскольку имя столбца user_id жестко закодировано в методе addUserInformation().

Расширение существующего DatabaseSessionHandler. php и замените метод addUserInformation(), чтобы он искал правильное имя столбца:

class DatabaseUuidSessionHandler extends DatabaseSessionHandler
{
    protected function addUserInformation(&$payload)
    {
        if ($this->container->bound(Guard::class)) {
            $payload['user_uuid'] = $this->userId();
        }

        return $this;
    }
}

Зарегистрируйте его у одного из поставщиков услуг:

class SessionServiceProvider extends ServiceProvider
{
    public function boot()
    {
        Session::extend('databaseUuid', function ($app) {
            return new DatabaseUuidSessionHandler;
        });
    }
}

Наконец обновите SESSION_DRIVER в ваш .env для использования только что созданного драйвера databaseUuid.

Помните, что это непроверенный код, и его следует использовать только в качестве руководства, как это может работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...