Hello, World!!

むずかしいことはかけません

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;

マイグレーション実行

[~/project]# php artisan migrate

ここまでで、http://127.0.0.1:8000/ にアクセスするとLaravelの画面が表示される。

認証機能作成

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だったりするので、以下の順番認証機能を作成すると

  1. プロジェクト作成
  2. 認証機能作成
  3. envファイル修正
  4. データベース作成
  5. マイグレーション実行

laravelという名前のデータベースを使用する設定で認証機能が作られてしまう。
なので、その状態で会員登録しようとすると以下のようなエラーが表示される。

SQLSTATE[HY000] [1049] Unknown database 'laravel' (SQL: select count(*) as aggregate from `users` where `email` = hoge@gmail.com)

そのため、envファイルを書き換えた後に認証機能を追加するべき