Laravel6.xで認証機能を追加する手順

Laravel フレームワーク

Laravel5.8まではphp artisan make:authコマンドで認証機能を実装していましたが、Laravel6からはこのartisanコマンドが削除されました。

代わりの方法が実装されているので、Laravel6で認証機能を追加する手順を説明します。
公式サイトでは以下で説明されています。
認証 6.x Laravel

laravel/ui Composerパッケージをインストールする

Laravelプロジェクト内で下記のコマンドを実行し、laravel/uiパッケージをインストールします。

$ composer require laravel/ui

php artisan ui vue –authを実行して認証機能を追加する

Laravelプロジェクト内で下記のコマンドを実行し、認証機能を追加します。

$ php artisan ui vue --auth

これで画面の右上に「LOGIN」と「REGISTER」が追加されています。

このまま「LOGIN」のリンクをクリックするとログインフォームが表示されますが、jsとcssが読み込めずにレイアウトが崩れています。


npm install、npm run devを実行する

Vue.jsのビルドをしてログイン画面が正しく表示されるようにします。
下記のコマンドを実行します。

$ npm install
$ npm run dev

ログイン画面が綺麗に表示されました。

登録画面はこんな感じ。

データベース設定とマイグレーションをする

自分は開発環境にLaradockを使っているのですが、ユーザーの新規登録をしようとすると以下の用なエラーの画面になりました。

Database name seems incorrect
You're using the default database name laravel. This database does not exist.

Edit the .env file and use the correct database name in the DB_DATABASE key

データベースの設定をする必要があります。
いくつかやる事があるので順番に対応していきます。

Laravelの.envを修正する

LaradockのMySqlのデフォルト設定を確認し、それに合わせてLaravelの設定をします。
まずLaradockの.envを確認すると以下のような感じになっています。

### MYSQL #################################################

MYSQL_VERSION=latest
MYSQL_DATABASE=default
MYSQL_USER=default
MYSQL_PASSWORD=secret
MYSQL_PORT=3306
MYSQL_ROOT_PASSWORD=root
MYSQL_ENTRYPOINT_INITDB=./mysql/docker-entrypoint-initdb.d

上記を参考に、Laravelプロジェクトの.envを編集して以下のようにします。

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=default
DB_USERNAME=default
DB_PASSWORD=secret

Laradockのmysql/my.cnfを修正する

Laradockのmysqlの設定を追加します。
Laradockのmysql/my.cnfに以下の行を追加します。

default_authentication_plugin=mysql_native_password

mysqlコンテナを再ビルドする

Laradockのmysqlの設定を反映させるために、コンテナを再ビルドします。
コンテナを抜けて、ホストマシン側で下記のコマンドを実行します。

> docker-compose down
> docker-compose build --no-cache
> docker-compose up -d nginx mysql phpmyadmin workspace

マイグレーションを実行する

workspaceコンテナに入り、マイグレーションを実行します。

> docker-compose exec workspace /bin/bash
$ php artisan migrate

ユーザーの新規登録に整合しました。

Laravel6で認証機能を追加する手順は以上です。

コメント/ピンバック

タイトルとURLをコピーしました