LaravelでLoginページを作る

確認環境:

Windows10、Laravel 7.30.4、PHP 7.2.33、MySQL 5.7.30

Loginページを作る

まずは、Laravelプロジェクト(ver 7.*)を新規作成する

composer create-project --prefer-dist laravel/laravel larademo01 "7.*"

以下のコマンドで、Loginページ(認証機能)を追加する

composer require laravel/ui
php artisan ui vue --auth

公式サイトによると、このコマンドは、プロジェクト新規作成直後に行うことを勧めています。

このように、コマンド1発で必要なものが準備できることを、スカフォールディングという。

多分、Ruby on Railsなんかでも、スカフォールディングという言葉は使うと思う。

php artisan serve

すると、自動的に以下の4つテーブルが作成されます。

Login時に登録したユーザーは、userテーブルに登録されます。

http://127.0.0.1:8000

にアクセスする。

以下のように、画面右上に、LOGINとREGISTERが表示される。

DBの設定

REGISERページに移動して、ユーザー登録してみる。

エラーになる。

Illuminate\Database\QueryException
SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: NO) (SQL: select count(*) as aggregate from `users` where `email` = 0gravity000@gmail.com)
http://127.0.0.1:8000/register

原因はDB設定をしていないため。

なので、MySQLでDB設定をする。

.envファイルを編集する

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=larademo01
DB_USERNAME=root
DB_PASSWORD=pass

MySQLのルートユーザーでログインする

ここでルートユーザーのパスワードを入力する

 mysql -u root -p

MySQLでデータベースを新規作成する。

create database larademo01;
use larademo01;

laravelでmigrateする

php artisan migrate

MySQLでテーブルが出来ているか確認する

show tables;

4つテーブルが出来ている。usersテーブルにユーザーが登録される。

+----------------------+
| Tables_in_larademo01 |
+----------------------+
| failed_jobs          |
| migrations           |
| password_resets      |
| users                |
+----------------------+
4 rows in set (0.00 sec)

php artisan serve をし直して、

http://127.0.0.1:8000

にアクセスする。

REGISERページに移動して、ユーザー登録する。

今度は成功する。

MySQL Workbenchで確認する。

usersテーブルに登録したユーザーが登録されている。

リダイレクトパスのカスタマイズ

認証に成功すると、

/home URIへリダイレクトします。

認証後のリダイレクトパスをカスタマイズするには、

RouteServiceProvider の中で

HOME 定数を定義する。

\app\Providers\RouteServiceProvider.php

    /**
     * The path to the "home" route for your application.
     *
     * @var string
     */
    public const HOME = '/home';

認証名のカスタマイズ

デフォルトでは、email フィールドを認証に利用している。

変更するには、LoginController で username メソッドを定義する。

\app\Http\Controllers\Auth\LoginController.php

public function username()
{
    return 'username';
}

ガードのカスタマイズ

???

バリデーション/保管域のカスタマイズ

\app\Http\Controllers\Auth\RegisterController.php

    /**
     * Get a validator for an incoming registration request.
     *
     * @param  array  $data
     * @return \Illuminate\Contracts\Validation\Validator
     */
    protected function validator(array $data)
    {
        return Validator::make($data, [
            'name' => ['required', 'string', 'max:255'],
            'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
            'password' => ['required', 'string', 'min:8', 'confirmed'],
        ]);
    }

    /**
     * Create a new user instance after a valid registration.
     *
     * @param  array  $data
     * @return \App\User
     */
    protected function create(array $data)
    {
        return User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => Hash::make($data['password']),
        ]);
    }

参考サイト

Laravel 7.x 認証

1件のコメント

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です