Laravel8、Jetstreamによるユーザー登録とカスタマイズ方法
いつもご利用ありがとうございます。
この記事には広告が掲載されており、その広告費によって運営しています。
Laravel8 の Jetstream によるユーザー登録とカスタマイズをする方法について書いていきます。
環境
"laravel/framework": "^8.54",
"laravel/jetstream": "^2.4",
Jetstream とは?
ユーザー登録や、ログインなどの機能を構築してくれます。
ようするにコマンドを打ったら、アプリケーション上でいろんな機能が使えるようになるということです。
Jetstream は、Laravel に美しく設計されたアプリケーションのスカフォールドを提供し、ログイン、ユーザー登録、メール検証、2要素認証、セッション管理、Laravel Sanctum を介した API サポート、およびオプションとしてチーム管理機能を含みます。Jetstream は TailwindCSS を使用して設計されており、Livewire(日本語)もしくは Inertia.js 駆動のフロントエンドスカフォールドから選択できます。
Jetstream をインストールする
コマンドでインストールします。
composer require laravel/jetstream
php artisan jetstream:install livewire
コマンドで JS 関連のインストールとビルド、マイグレーションの実行をします。
npm install && npm run watch
php artisan migrate
これで Jetstream のインストールは完了しました。
登録画面やログイン画面などの機能がルーティングに、これで追加されたのが確認できます。
コマンド
php artisan route:list
これ以降では、これで作成した雛形をもとにカスタマイズする方法について書いていきます。
users テーブルに保存する情報を追加したい
【注意!】
マイグレーションファイルを直接書き換えています。
もうすでに本番稼働しているサービスなどで変更するための方法ではありませんので、注意してください。
本番環境にデプロイしてない段階であれば、なんの問題もありません。
マイグレーションファイルに追記する
users テーブルは、最初から必要最低限の認証に必要なデータや、「使うであろう」カラムが用意されています。
database/migration/2014_10_12_000000_create_users_table.php
を開いてみると、色々なカラムが生成されるように設定されていることが分かります。
今回、例えば「性別」を入力したい場合、「gender」というカラムを追加してみましょう。
//これを追記する
//入れる場所は最後ではなく、カラムの順番としてわかりやすいところにしたい
$table->string('gender')->nullable();
全体(gender カラムを追加後のマイグレーションファイル)
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->foreignId('current_team_id')->nullable();
$table->string('profile_photo_path', 2048)->nullable();
//これを追記する
//入れる場所は最後ではなく、カラムの順番としてわかりやすいところにしたい
$table->string('gender')->nullable();
$table->timestamps();
});
マイグレーションファイルを変更したらコマンドを打つ
コマンドを打ちます。
php artisan migrate:fresh
マイグレーションをしますが、fresh オプション付きで打ちます。
開発環境なので、打てるコマンドで、決して本番環境では打ってはダメということだけ覚えておきましょう。
すでに本番環境で稼働しているときは「カラムを追加する」マイグレーションファイルを作ってコマンド
php artisan migrate
になりますが、今回は作りはじめなので、このやり方をしています。
参考記事
⇨Laravel でデータベースを作成する方法(マイグレーション)
登録時に gender を保存する
App/Http/Controllers/Auth/RegisterController.php を開いて
protected function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'gender' => $data['gender'], //追加
'password' => Hash::make($data['password']),
]);
}
と追加します。
User モデルに追記
ホワイトリストに追加します。
App\Models\User.php or App\User.php
protected $fillable = [
'name', 'email', 'password', 'gender' //追加
];
登録時に入力フォームを追加
resources/views/auth/register.blade.php
<input name="gender" />
上記のように、name を gender と指定した input タグ(select タグなどでも可)を用意して入力できるようにします。
実際に入力してみて保存できれば OK です。
email ではなくログイン ID でログインさせたい
まず config で設定を変更する
config/fortify.php
49行目あたりにこんな記述があります。
'username' => 'email',
ここを、
'username' => 'lid'
// 'username' => 'ログインさせたいカラム名'
ログインページや登録ページを編集する
コマンド
php artisan vendor:publish --tag=jetstream-views
auth/login.blade.php の修正
<input name="email" />
<input name="lid" />
まとめ
結構登録周りのカスタマイズは Laravel6 と変わっているような、変わっていないような感じですね。
日々アップデートしていきます。
こういうカスタマイズしてみたいけど情報見つからないと言う人は Twitter からご連絡くださいませ。
関連記事
Laravel でユーザー登録時に色々なデータを保存する方法
人気記事