Laravel 6/7 で認証(ログイン)機能を追加

Laravel 6.x/7.x

Laravel 開発環境を構築して認証(ログイン)機能を追加してみます。
今回は LTS の Laravel 6.x と 7.x で違いを見てみます。

サポートは下記のようになっているようです。

詳細はこちら リリースノート

Docker での環境構築はこちらを参照ください。
http://vistylee.com/docker-laravel/

Laravel インストール

ブロジェクト作成

  • Laravel 6.x/7.x の場合
    プロジェクトを作成する場合はcreate-projectコマンドを実行します。
    Laravel 7.x がリリースされた関係で Laravel 6.x インストールした場合は、バージョンを指定します。Laravel 7.x の場合はバージョン指定は不要です。

  • Laravel 7.x の場合
    laravel new コマンドでプロジェクト作成できます。
    最新のバージョンとなります。(authオプションで認証機能を一緒に作成することもできます)

認証(ログイン)機能追加

  • 事前にマイグレーションを実行します。
    .env ファイルと config/database.php の DB 設定はしておく必要があります。

    下記テーブルを作成されます。

    • users
    • password_resets
    • failed_jobs
  • Laravel 5.8 までの場合

Laravel 6.x/7.xでは、laravel/uiパッケージが必要となりますので、composerでインストールします。

  • laravel/uiを追加

  • フロント側対応
    事前に Node.js と NPM をインストールしておく必要があります。

  • Laravel 7.x の場合
    laravel new コマンドでプロジェクト作成時に auth オプションを指定することでも可能です。

バージョン確認

認証機能

認証の機能として主に下記を見ていきます。

  • ユーザー登録
  • ユーザー認証
    • ログイン
    • ログアウト
  • パスワードリセット

初期使用ファイル

ルーティング

Artisan コマンドで確認します。使用するミドルウェアも確認できます。

ファサード

Auth ファサードをいくつか見ていきます。

  • Auth::attempt
    attemptメソッドは認証を行います。
    認証に使用する値をキー/値ペアの配列を渡します。

  • Auth::check
    checkメソッドはユーザーが既にログインしているかを調べます。

  • Auth::user
    userメソッドは認証ユーザーを取得します。

  • Auth::guest

  • Auth::viaRemember
    ユーザーがログイン維持(Remember me)機能を使用して認証されているかを確認します。

  • Auth::login
    ログインさせる

  • Auth::once
    1回だけ認証する(セッションを持たせない)

  • Auth::routes
    認証用ルーティングを一括しています。

  • Auth::logout
    ログアウトさせる

  • Auth::guard
    ガードを使った処理をさせる

認証設定ファイル

config/auth.php の設定を見ていきます。

  • defaults デフォルトの認証「ガード」およびパスワードリセットオプション
    • guard 使用する設定を guards から指定、初期値は web
    • passwords 使用する設定を passwords から指定、初期値は users
  • 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'

使用テーブル

マイグレーションで追加されるテーブル

  • users テーブル

  • password_resets テーブル

認証UIファイル

php artisan ui vue --authコマンドで生成されるファイルです。

コンパイルファイル

npm run dev で生成されるファイルです。

言語設定

  • タイムゾーンと言語設定
    config/app.php の timezone と locale を変更します。

  • 日本語化設定
    インストーラーをダウンロードして、インストールします。

    resources/lang/ja/ ディレクトリと下記ファイルが生成されます。

    • auth.php
    • pagination.php
    • passwords.php
    • validation.php
  • フィールドの日本語化設定
    resources/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/

返信を残す

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

CAPTCHA