Laravel7 認証機能
Laravel7 認証機能を作ってみました。
プロジェクト作成
[~]# composer create-project --prefer-dist laravel/laravel project
.envファイルとdatabase.phpの修正
.envファイル
DB_DATABASE=mydb
config/database.php
'mysql' => [ 'driver' => 'mysql', 'url' => env('DATABASE_URL'), 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '3306'), 'database' => env('DB_DATABASE', 'mydb'), //修正 'username' => env('DB_USERNAME', 'root'), //修正 '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'), ]) : [], ],
データベース作成
[~/project]# mysql -u root mysql> create database mydb;
認証機能作成
Laravel 5.0からは make:auth コマンドで認証機能が作れましたが、Laravel 6.0からはlaravel/uiという名前の別パッケージとして管理されるようになりました。
そのため、パッケージをインストールする必要があります。
[~/project]# composer require laravel/ui [~/project]# php artisan ui vue --auth
上記の実行が終わった後
Please run "npm install && npm run dev" to compile your fresh scaffolding.
と言われるのでこちらも実行、これでcssが適応される
[~/project]# npm install [~/project]# npm run dev
これで認証機能ができた、実際に会員登録しmysqlを確認してみると
mysql> select * from users \G; *************************** 1. row *************************** id: 1 name: HogehogeFugafuga email: hoge@gmail.com email_verified_at: NULL password: $2y$10$6NEsa.T307f0A6Pq6jUUF.CcDQpVvfN/xLONRxqWyiOGGmrzbJi/6 remember_token: NULL created_at: 2020-03-10 06:50:45 updated_at: 2020-03-10 06:50:45
ちゃんと会員登録もされて、ログインもできた。
注意
初期設定のenvファイルのDB設定はDB_DATABASE=laravelだったりするので、以下の順番認証機能を作成すると
- プロジェクト作成
- 認証機能作成
- envファイル修正
- データベース作成
- マイグレーション実行
laravelという名前のデータベースを使用する設定で認証機能が作られてしまう。
なので、その状態で会員登録しようとすると以下のようなエラーが表示される。
SQLSTATE[HY000] [1049] Unknown database 'laravel' (SQL: select count(*) as aggregate from `users` where `email` = hoge@gmail.com)
そのため、envファイルを書き換えた後に認証機能を追加するべき