1
1

More than 3 years have passed since last update.

【備忘録】Laravel 6でユーザー認証作る時につまずいたけど解決した方法共有!!

Last updated at Posted at 2020-09-22

はじめに

こんばんは!
私は、毎週、「1週間1制作計画」っていうのをやっています。
最近は、PHPの勉強を始めたので、今週は、PHP及びLaravelの練習を兼ねてLaravelでアプリケーションを制作してみようと思っていました。

そこで、認証機能をつけようと思い、Laravelに標準装備されている認証機能Authを使ってみようと考え、トライしてみました!!

...すると、めっちゃつまづいた!!

今日の投稿では、そのつまづいた部分について、解決した方法を、認証機能の実装方法と共に記録していきます!
また、その方法自体は最後に記載されている参考資料・文献を参考に実装しました。

まずはLaravel 6をインストールしたい!!

Laravel 6をなぜ選んだかというと、サポート期間が最新のLaravel 8よりも長いためです(LTS = Long-Term-Support)。

一般的なインストール方法

laravel new プロジェクト名

ですよね!
しかし、今回は違います!以下のコードをご覧ください。

composer create-project "laravel/laravel=6.*" プロジェクト名

バージョンを指定して、Laravelをインストールする方法は、上記のように、composerを用います。
アプリケーションの実行には、通常通り、

php artisan serve

を使います。

標準装備Auth使っていきましょう!

それでは、いよいよ標準装備のAuthを使っていきます!
まずは、Auth機能を使うために、laravel/uiというパッケージを導入しましょう。

composer require laravel/ui:^1.0 --dev

上記コードをターミナルに入力して実行すると、認証部分のフロントエンドを制作できるlaravel/uiを導入することができます。
Auth関連のファイルを生成するために、以下の2つをターミナルに記述して実行します。

php artisan ui vue --auth
php artisan migrate

php artisan migrateしたらエラー返ってきた!!

そうです、このphp artisan migrateしたら、以下のようなエラーが返ってきてしまいました。

   Illuminate\Database\QueryException  : SQLSTATE[HY000] [2002] Connection refused (SQL: select * from information_schema.tables where table_schema = homestead and table_name = migrations)

  at /Users/username/code/LaravelSample/vendor/laravel/framework/src/Illuminate/Database/Connection.php:664
    660|         // If an exception occurs when attempting to run a query, we'll format the error
    661|         // message to include the bindings with SQL, which will make this exception a
    662|         // lot more helpful to the developer instead of just the database's errors.
    663|         catch (Exception $e) {
  > 664|             throw new QueryException(
    665|                 $query, $this->prepareBindings($bindings), $e
    666|             );
    667|         }
    668| 

  Exception trace:

  1   PDOException::("SQLSTATE[HY000] [2002] Connection refused")
      /Users/username/code/LaravelSample/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70

  2   PDO::__construct("mysql:host=127.0.0.1;port=3306;dbname=homestead", "homestead", "secret", [])
      /Users/username/code/LaravelSample/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70

  Please use the argument -v to see more details.

正直、まだデータベースいじってないのに、何なんだ!!
「よくわからん!!調べても、Dockerを利用している人が多くて、自分の開発環境とは違うので参考にならん!!」
って感じでした。
なので、自分の手持ちのテキストに書いてあったように、そのまま以下をターミナルに記述して実行しちゃいました(笑)

npm install && npm run dev

そして、先ほど、アプリケーションを実行した時のように、

php artisan serve

を実行。
アプリケーションを開くことができる状態になります。
http://localhost:8000/
を開いてみてください。
スクリーンショット 2020-09-22 23.09.58.png
上の画像のようなページが開きます。最初に開いた時と変わらないようにも消えますが、
右上を見て頂くと、きちんと、LOGINとREGISTERと書かれていることがわかります。つまり、きちんと、Auth機能、実装できたんじゃないかと思いますよね!!
これが実は落とし穴...テキストでは触れられていない落とし穴だった。

REGISTER(ユーザー登録)できない!?

まず、初めて利用するので、ユーザー登録をしてみます。
REGISTERを押して、ユーザー登録画面に遷移します。
そして、ユーザー名やメールアドレス、パスワードと言った、登録に必要なデータを入力します。
さぁ、REGISTERボタンを押して、登録だ!

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.

なんか出てきた...泣

先ほど、php artisan migrate失敗した時もデータベース関連のエラーが出てきましたね。
今回も同じく、データベース関連のエラーです。データベース名が違うんですって。(incorrect)

次項から、この問題を解決していきます。

まず、データベースに接続しよう!

Laravelプロジェクト作ってから全くいじっていなかったデータベースを、ついにいじっていきます!

MySQLをインストール

MySQLをまずはインストールしましょう。以下をターミナルに記述して実行してください。

brew install mysql

インストールできたら、起動してください。

mysql.server start --skip-grant-tables

上記の方法で起動すると、パスワード不要でした!
その後、ルートユーザーで接続。

mysql -uroot

データベースを作っていきましょう

それでは、続いて、データベースを作っていきます。
最初に、以下のコマンドを記述して、現在のデータベースの様子をチェックします。

mysql> show databases;

ダッシュ(途切れ途切れのあの線)で囲われて、Databaseっていうのが出てきます。出てきたらオッケーです。
次に、新しくデータベースを作成するコマンドを記述して実行してください。

create database sample;

私が、上記でsampleと記述した部分は、みなさんの任意の名前です。
そしてもう一度、show databases;で、データベースの状況を確認します。出力結果に、ここでいう、sampleが含まれていたら問題ないです!

rootユーザーのパスワードの変更

MySQLのrootユーザーのパスワードの変更を行います。

mysql> FLUSH PRIVILEGES;

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'secret';

上記を実行してください。
それぞれ、実行直後には、Query OK, なんちゃらとかいうのが返ってきたらOKです!
ここでは、rootユーザーのパスワードを、「secret」に変更しています。
こちらも特に決まりはないので、任意の言葉で。
まぁ、サンプルコードでよく見るのは、secretですね(笑)

この処理が終了すれば、一旦MySQLを終了してから再起動させます。以下のコマンドを入力。

mysql> exit

再起動

mysql.server restart

認証プラグインの変更

ここで、すいません、MySQLをまた違う方法で開きたいので、またまたexitをお願いします。
以下のコマンドでMySQLに接続してください。

mysql -uroot -p

その後、Enter Passwordと言われ、パスワードの入力を求められます。
先ほど、変更したルートユーザーのパスワード、secretを入力してください。
接続できたら、次のコマンドを実行。

SELECT user, host, plugin FROM mysql.user;

SELECT文が出てきたら、ようやくデータベースいじってる感出てきましたねー!
上記コマンドで現状の認証プラグインを調べることができます。
おそらく、caching_sha2_passwordとなっているかと思います。
今回は、mysql_native_passwordを使いたいので、変更しましょう。以下のコマンドを実行してください。

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'secret';

それでは、再度、以下のコマンドで確認してみましょう。

SELECT user, host, plugin FROM mysql.user;

root項目のプラグインが、caching_sha2_passwordだったのに、mysql_native_passwordに変更されているかと思います。

あと少し!.envファイルの編集をしよう!

一旦、ターミナルからは離れて、エディタに移動してください。
作成したプロジェクトのフォルダ内に、「.env」という名前のファイルがあると思います。そのファイルを開きましょう。
※examapleがついている.envファイルは違います!!今回編集するのは、ただの.envファイルです!

開いたらなんだかデータベースに関連しそうな内容がたくさん書かれています。
その中でも、以下のコメントアウトした部分を変更します。

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel // ココ変更するよ!
DB_USERNAME=root
DB_PASSWORD= // ココ変更するよ!

まず、DB_DATABASE=laravelの、laravelの部分を、sampleにします。
このsampleは、新しくデータベースを作った時に使った名前です。

DB_PASSWORD= は、元々空欄になっていますが、rootユーザーのパスワードとして設定した、secretを空欄部分に入れます。

最終的には、以下のような状態になるかと思います。

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=sample
DB_USERNAME=root
DB_PASSWORD=secret

編集後、またターミナルに帰りましょう。
キャッシュの削除を行います。

php artisan config:cache

最初できなかったphp artisan migrateしてみる!

この時点で、

php artisan migrate

してみると、成功します。

REGISTERリベンジ!

もう一度、Laravelアプリケーションを実行してみましょう。

php artisan serve

ですね。
そしてもう一度、REGISTERに挑戦してみてください!!
すると、エラーは特に出ず、登録できるようになっています!!

まとめ

長くなりましたが、数時間かけて格闘していたので、備忘録としてまとめてみました!
ここまでお読みくださり、ありがとうございました。
理解不足等による不備があれば、コメントお願い致します。

参考資料・文献

【Laravel】MySQLの接続方法を徹底解説【コピペでOK】

更新!!Laravel6/7 (laravel/ui)でのLogin機能の実装方法〜MyMemo

【Laravel】Laravelでバージョンを指定してインストールする方法

掌田津耶乃著『PHPフレームワーク Laravel入門 第2版』(2020)

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1