Contents
Laravel 6.x/7.x
Laravel 開発環境を構築して認証(ログイン)機能を追加してみます。
今回は LTS の Laravel 6.x と 7.x で違いを見てみます。
サポートは下記のようになっているようです。
1 2 3 4 5 6 |
* 6 (LTS) - バグフィックス期限: 2021年9月3日 - セキュリティフィックス期限: 2022年9月3日 * 7 - バグフィックス期限: 2020年9月3日 - セキュリティフィックス期限: 2021年3月3日 |
詳細はこちら リリースノート
Docker での環境構築はこちらを参照ください。
http://vistylee.com/docker-laravel/
Laravel インストール
1 |
composer global require "laravel/installer" |
ブロジェクト作成
-
Laravel 6.x/7.x の場合
プロジェクトを作成する場合はcreate-projectコマンドを実行します。
Laravel 7.x がリリースされた関係で Laravel 6.x インストールした場合は、バージョンを指定します。Laravel 7.x の場合はバージョン指定は不要です。1234# 7.xcomposer create-project --prefer-dist laravel/laravel blog# 6.xcomposer create-project --prefer-dist laravel/laravel blog "6.*" -
Laravel 7.x の場合
laravel new コマンドでプロジェクト作成できます。
最新のバージョンとなります。(authオプションで認証機能を一緒に作成することもできます)1laravel new blog
認証(ログイン)機能追加
-
事前にマイグレーションを実行します。
.env ファイルと config/database.php の DB 設定はしておく必要があります。1php artisan migrate下記テーブルを作成されます。
- users
- password_resets
- failed_jobs
-
Laravel 5.8 までの場合
1php artisan make:auth
Laravel 6.x/7.xでは、laravel/uiパッケージが必要となりますので、composerでインストールします。
-
laravel/uiを追加
123456# 7.xcomposer require laravel/ui# 6.xcomposer require laravel/ui:^1.0 --devphp artisan ui vue --auth - フロント側対応
事前に Node.js と NPM をインストールしておく必要があります。12npm installnpm run dev
- Laravel 7.x の場合
laravel new コマンドでプロジェクト作成時に auth オプションを指定することでも可能です。1laravel new blog --auth
バージョン確認
1 |
php artisan --version |
認証機能
認証の機能として主に下記を見ていきます。
- ユーザー登録
- ユーザー認証
- ログイン
- ログアウト
- パスワードリセット
初期使用ファイル
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
* routes - ルート定義 routes\web.php * Facade - 認証機能 Auth * Config - 認証機能の設定 config/auth.php * Controller いずれもトレイトを使用 - パスワード確認 app\Http\Controllers\Auth\ConfirmPasswordController.php - パスワードリセットメール app\Http\Controllers\Auth\ForgotPasswordController.php - ユーザー認証 app\Http\Controllers\Auth\LoginController.php - ユーザー登録、検証、作成 app\Http\Controllers\Auth\RegisterController.php - パスワードリセット app\Http\Controllers\Auth\ResetPasswordController.php - 最近登録したすべてのユーザーの電子メール検証 app\Http\Controllers\Auth\VerificationController.php * Middleware - 認証チェック app\Http\Middleware\Authenticate.php - 認証ユーザーリダイレクト app\Http\Middleware\RedirectIfAuthenticated.php * Providers - 認証のゲート、ポリシー app\Providers\AuthServiceProvider.php * Eloquent - ユーザーモデル app\User * Migration - ユーザーテーブル定義 database\migration\2014_10_12_000000_create_users_table.php - パスワードリセットテーブル定義 database\migration\2014_10_12_100000_create_password_resets_table.php |
ルーティング
Artisan コマンドで確認します。使用するミドルウェアも確認できます。
1 |
php artisan route:list |
ファサード
Auth ファサードをいくつか見ていきます。
-
Auth::attempt
attempt
メソッドは認証を行います。
認証に使用する値をキー/値ペアの配列を渡します。1234$credentials = $request->only('email', 'password');if (Auth::attempt($credentials)) {// 認証成功} -
Auth::check
check
メソッドはユーザーが既にログインしているかを調べます。123if (Auth::check()) {// ログインしている} -
Auth::user
user
メソッドは認証ユーザーを取得します。1$user = Auth::user(); -
Auth::guest
123if (Auth::guest()) {// ゲストユーザー} -
Auth::viaRemember
ユーザーがログイン維持(Remember me)機能を使用して認証されているかを確認します。123if (Auth::viaRemember()) {// Remember me を使用している} -
Auth::login
ログインさせる1Auth::login($user); -
Auth::once
1回だけ認証する(セッションを持たせない)123if (Auth::once($credentials)) {// 単発の認証成功} -
Auth::routes
認証用ルーティングを一括しています。1Auth::routes(); -
Auth::logout
ログアウトさせる1Auth::logout(); -
Auth::guard
ガードを使った処理をさせる1234# admin用のguardを作成しておき通常のuserとは別のadminの認証を行う場合if (Auth::guard('admin')->attempt($credentials)) {// adminユーザー}
認証設定ファイル
config/auth.php の設定を見ていきます。
- defaults デフォルトの認証「ガード」およびパスワードリセットオプション
- guard 使用する設定を guards から指定、初期値は
web
- passwords 使用する設定を passwords から指定、初期値は
users
- guard 使用する設定を guards から指定、初期値は
- guards
- web
- driver ドライバーの種類、初期値は
session
- provider 使用する設定を providers から指定、初期値は
users
- api
- driver ドライバーの種類、初期値は
token
- provider 使用する設定を providers から指定、初期値は
users
- hash APIトークンを平文ではなく SHA-256 にする場合は true、初期値は
false
- providers
- users
- driver データへアクセスするのに使用するドライバー、初期値は
eloquent
- model 指定したドライバーが eloquent の場合、使用するモデル、初期値は
App\User::class
- passwords
- users
- provider 使用するproviderの設定、初期値は
users
- table パスワードリセットトークンを格納するテーブル、初期値は
password_resets
- expire 有効時間、初期値は
60
- throttle 要求制限、スロットル時間(秒)、初期値は
60
- password_timeout パスワード再確認までの時間、初期値は
10800
コントローラー
-
パスワード確認
app\Http\Controllers\Auth\ConfirmPasswordController.php
パスワード確認の処理をします。
ConfirmsPasswords
トレイトを使用 -
パスワードリセットメール
app\Http\Controllers\Auth\ForgotPasswordController.php
パスワードリセットメールの処理をします。
メールをユーザーに送信
SendsPasswordResetEmails
トレイトを使用 -
ユーザー認証
app\Http\Controllers\Auth\LoginController.php
ユーザーを認証し、ホーム画面へリダイレクトの処理をします。
AuthenticatesUsers
トレイトを使用 -
ユーザー登録、検証、作成
app\Http\Controllers\Auth\RegisterController.php
ユーザー登録、検証、作成の処理をします。
RegistersUsers
トレイトを使用 -
パスワードリセット
app\Http\Controllers\Auth\ResetPasswordController.php
パスワードのリセット要求の処理をします。
ResetsPasswords
トレイトを使用 -
最近登録したすべてのユーザーの電子メール検証
app\Http\Controllers\Auth\VerificationController.php
最近登録したすべてのユーザーの電子メール検証の処理をします。
VerifiesEmails
トレイトを使用
ミドルウェア
-
認証チェック
app\Http\Middleware\Authenticate.php
認証されていない場合にユーザーをリダイレクトするパスを返す -
認証ユーザーリダイレクト
app\Http\Middleware\RedirectIfAuthenticated.php
リダイレクトを処理します。
プロバイダ
- 認証のゲートやポリシーの登録
app\Providers\AuthServiceProvider.php
ポリシーマッピング
認証/認可サービスを登録処理します。
Eloquentモデル
- ユーザーモデル
app\User
- fillable 値を代入するフィールドを設定、初期値は
'name', 'email', 'password'
- hidden データを取得しないフィールドを指定、初期値は
password', 'remember_token
- casts キャストが必要なフィールドを指定、初期値は
'email_verified_at' => 'datetime'
- fillable 値を代入するフィールドを設定、初期値は
使用テーブル
マイグレーションで追加されるテーブル
-
users テーブル
12345678`id` ID,プライマリーキー`name` ユーザー名`email` メールアドレス,ユニーク`email_verified_at` メールアドレスを確認した日時`password` パスワード`remember_token` 自動ログイン用トークン`created_at` 作成日時`updated_at` 更新日時 -
password_resets テーブル
123`email` メールアドレス`token` パスワードリセットトークン`created_at` 作成日時
認証UIファイル
php artisan ui vue --auth
コマンドで生成されるファイルです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# 変更ファイル package.json resources\js\app.js resources\js\bootstrap.js resources\sass\app.scss routes\web.php webpack.mix.js # 追加ファイル + app\Http\Controllers\HomeController.php + resources\js\components\ExampleComponent.vue + resources\sass\_variables.scss + resources\views\auth\login.blade.php + resources\views\auth\passwords\confirm.blade.php + resources\views\auth\passwords\email.blade.php + resources\views\auth\passwords\reset.blade.php + resources\views\auth\register.blade.php + resources\views\auth\verify.blade.php + resources\views\home.blade.php + resources\views\layouts\app.blade.php |
コンパイルファイル
npm run dev
で生成されるファイルです。
1 2 |
+ public\css\app.css + public\js\app.js |
言語設定
-
タイムゾーンと言語設定
config/app.php の timezone と locale を変更します。12'timezone' => 'Asia/Tokyo''locale' => 'ja', -
日本語化設定
インストーラーをダウンロードして、インストールします。123php -r "copy('https://readouble.com/laravel/6.x/ja/install-ja-lang-files.php', 'install-ja-lang.php');"php -f install-ja-lang.phpphp -r "unlink('install-ja-lang.php');"resources/lang/ja/ ディレクトリと下記ファイルが生成されます。
- auth.php
- pagination.php
- passwords.php
- validation.php
-
フィールドの日本語化設定
resources/lang/ja/xxx.php 各ファイルで設定していきます。1resources/lang/ja/xxx.php
まとめ
Laravel7 ですとベースの認証機能が laravel コマンドで追加されるので、ありがたいですね。
laravel コマンドは最新のバージョンでインストールされるので、laravel6 は composer create-project でプロジェクト作成するなど異なってきますので、注意が必要です。
参考リンク
Authentication 7.x
Authentication 6.x
Laravel 7.x 認証
Laravel 6.x 認証
auth.php言語ファイル 7.x Laravel
auth.php言語ファイル 6.x Laravel
関連リンク
http://vistylee.com/docker-laravel/
http://vistylee.com/laravel-artisan/