Laravel/vueのちょっとした事の覚え書き。Laravel 8.xで作業した際の情報。
複数アプリ間でユーザーDBとセッションを共通化
/config/database.php に適当な名前を付けて追加し、databaseのところだけ直接指定する。
'mysql_auth' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => 'userdb',
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],
app/models/user.php のdbを変更
protected $connection = 'mysql_auth';
app/Http/Auth/RegisterController.php unique:usersにdb名追加
protected function validator(array $data)
{
return Validator::make($data, [
'name' => ['required', 'string', 'max:255'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:mysql_auth.users'],
'password' => ['required', 'string', 'min:8', 'confirmed'],
]);
}
セッション用にテーブル追加
php artisan session:table
migrationファイルが作成されるので編集する
public function up()
{
Schema::connection('mysql_auth')->create('sessions', function (Blueprint $table) {
$table->string('id')->primary();
$table->foreignId('user_id')->nullable()->index();
$table->string('ip_address', 45)->nullable();
$table->text('user_agent')->nullable();
$table->text('payload');
$table->integer('last_activity')->index();
});
}
.env編集。SESSION_DOMAIN設定すると上手く行かなかった。
SESSION_DRIVER=database
SESSION_CONNECTION=mysql_auth
php artisan migrate する。