環境
- macOS Mojave 10.14.6
- laravel 5.8.35
- MySQL 8.0.17
composerのインストールが既に終わっていることを前提に解説していきます。
MySQL 8.0以降ではユーザー関連のコマンドの仕様により色々とエラーにハマってしまったので、今後開発する人のためや、自分用のメモとしてまとめて見ました。
アプリの新規作成
composer create-project laravel/laravel app_name --prefer-dist
MySQLでデータベースを作成する。
MySQL> create database db_name;
MySQLユーザーを作成する(既に作成している場合は不要)
MySQL> create user 'dbuser'@'localhost' identified by 'password';
MySQL 8.0以降はパスワードLOWでも条件が厳しくなっているので、今まで通っていたパスワードでも怒られることがあります。
// LOWにする場合
MySQL> SET GLOBAL validate_password.policy = LOW;
https://dev.mysql.com/doc/refman/8.0/en/validate-password-options-variables.html
MySQLユーザーに権限を与える
MySQL> grant all on db_name.* to 'dbuser'@'localhost';
MySQLの操作は以上で終了 \q でMySQLを終了させておく。
MySQL8以降はgrantコマンドでユーザー作成ができないのでこの手順で作成する
パスワード認証方式を変更する
MySQL 8.0以降ではデフォルトで caching_sha2_password
となっている。このままだと接続がうまくいかないので mysql_native_password
へ変更する必要がある。
まずは確認してみる
mysql> select user, host, plugin from mysql.user;
+------------------+-----------+-----------------------+
| user | host | plugin |
+------------------+-----------+-----------------------+
| dbuser | localhost | caching_sha2_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session | localhost | caching_sha2_password |
| mysql.sys | localhost | caching_sha2_password |
| root | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+
dbuserの認証方式を変更する
mysql> ALTER USER 'dbuser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
Query OK, 0 rows affected (0.10 sec)
laravelとMySQLを接続する
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=app_name
DB_USERNAME=dbuser
DB_PASSWORD=password
.envファイルにデータベース名、ユーザー名、パスワードを記述。
usersテーブルを作成する
php artisan migrate
laravelでは既にusersテーブルを作成する為のマイグレーションファイルが用意されているので今回はそのまま使用します。
ログイン機能を実装する
php artisan make:auth
laravelではこのコマンドを実行するだけでログイン機能を実装できます。