コンテンツに移動 ナビゲーションに移動

IT全般に関する雑記や技術ブログ。wordpressやPHP LaravelたまにPython

南の島のSE エンジニアブログ

PHP
  1. HOME
  2. PHP
  3. Laravel 8でログイン機能実装2 ログインID導入
2020年8月12日 / 最終更新日 : 2022年5月9日 syun03 PHP

Laravel 8でログイン機能実装2 ログインID導入

Laravelのパッケージとして利用できるログイン機能のカスタマイズシリーズ第二弾として

ログインIDを導入致します。

最近は「メールアドレス」と「パスワード」でログインできるサイトが一般的ですが

ログインIDを使えるようにしたいという要望も一定数ございますので、今回はこの対応をご紹介いたします。

目次
  • 1. サイト構成
  • 2. 実装
  • 2.1. 会員登録画面の修正
  • 2.2. 会員登録用controllerの修正
  • 2.2.1. バリデーション
  • 2.3. データ生成
  • 2.4. ログイン画面の修正
  • 2.5. ログイン用controllerを修正
  • 3. ログイン機能連載一覧

サイト構成

  • 会員登録 ← ここにログインIDを追加
  • ログイン ← ログインIDでログインできるようにする
  • 会員メニュー
  • ログアウト
  • パスワード再設定

実装

手順は下記の通りです。

  1. 会員登録画面を修正
  2. 会員登録用controllerを修正
  3. ログイン画面を修正
  4. ログイン用controllerを修正

まず会員登録の機能を修正し、会員が作成できることを確認できた後

ログイン機能を修正していきます。

会員登録画面の修正

nameの部分をlogin_idに修正します。

※注! 一括置換すると不要な部分も修正してしまいますので、下記をご覧になりながら修正ください

こちらが完成形です

@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-8">
            <div class="card">
                <div class="card-header">{{ __('Register') }}</div>

                <div class="card-body">
                    <form method="POST" action="{{ route('register') }}">
                        @csrf

                        <div class="form-group row">
                            <label for="login_id" class="col-md-4 col-form-label text-md-right">{{ __('login_id') }}</label>

                            <div class="col-md-6">
                                <input id="login_id" type="text" class="form-control @error('login_id') is-invalid @enderror" name="login_id" value="{{ old('login_id') }}" required autocomplete="login_id" autofocus>

                                @error('login_id')
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                @enderror
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="email" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label>

                            <div class="col-md-6">
                                <input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email">

                                @error('email')
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                @enderror
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Password') }}</label>

                            <div class="col-md-6">
                                <input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="new-password">

                                @error('password')
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                @enderror
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="password-confirm" class="col-md-4 col-form-label text-md-right">{{ __('Confirm Password') }}</label>

                            <div class="col-md-6">
                                <input id="password-confirm" type="password" class="form-control" name="password_confirmation" required autocomplete="new-password">
                            </div>
                        </div>

                        <div class="form-group row mb-0">
                            <div class="col-md-6 offset-md-4">
                                <button type="submit" class="btn btn-primary">
                                    {{ __('Register') }}
                                </button>
                            </div>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>
@endsection

会員登録用controllerの修正

修正するのは、バリデーション機能とデータ生成機能の2か所です。

バリデーション

    protected function validator(array $data)
    {
        return Validator::make($data, [
            'login_id' => ['required', new alpha_num_check(), 'max:20','unique:users'],
            'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
            'password' => ['required', 'string', 'min:8', 'confirmed'],
        ]);
    }

login_idに対してのバリでショーンルールを追加しています。

項目意味
required必須入力です
new alpha_num_check()
※追加開発機能
半角英数であることをチェック
公式サイト記載のalpha_numでは残念ながら日本語文字列はスルーされてチェックされません
そのため、追加機能を開発しております。
詳細は半角英数のバリデーションをご覧ください
max:20最大20文字
unique:usersusersテーブル内でのlogin_idに対しての重複チェック

データ生成

    protected function create(array $data)
    {
        return User::create([
            'login_id' => $data['login_id'],
            'email' => $data['email'],
            'password' => Hash::make($data['password']),
        ]);
    }

4行目でlogin_idへの登録機能を追加しております。

最後に、データベースの登録先を作成するため

migrationファイルを作成して、usersテーブルにlogin_idのカラムを追加します。

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class AddUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->string('login_id',20)->after('name')->comment('ログインID');
            $table->unique(['login_id']);
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('users');
    }
}

こちらを準備しmigrateコマンドをたたけば、カラムが追加されます。

php artisan migrate

ログイン画面の修正

会員登録画面と同様にnameと記載の部分をlogin_idに修正します。

こちらも誤って修正しすぎないように注意が必要です。

@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-8">
            <div class="card">
                <div class="card-header">{{ __('Login') }}</div>

                <div class="card-body">
                    <form method="POST" action="{{ route('login') }}">
                        @csrf

                        <div class="form-group row">
                            <label for="email" class="col-md-4 col-form-label text-md-right">{{ __('login_id') }}</label>

                            <div class="col-md-6">
                                <input id="login_id" type="text" class="form-control @error('login_id') is-invalid @enderror" name="login_id" value="{{ old('login_id') }}" required autocomplete="login_id" autofocus>

                                @error('login_id')
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                @enderror
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Password') }}</label>

                            <div class="col-md-6">
                                <input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="current-password">

                                @error('password')
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                @enderror
                            </div>
                        </div>

                        <div class="form-group row">
                            <div class="col-md-6 offset-md-4">
                                <div class="form-check">
                                    <input class="form-check-input" type="checkbox" name="remember" id="remember" {{ old('remember') ? 'checked' : '' }}>

                                    <label class="form-check-label" for="remember">
                                        {{ __('Remember Me') }}
                                    </label>
                                </div>
                            </div>
                        </div>

                        <div class="form-group row mb-0">
                            <div class="col-md-8 offset-md-4">
                                <button type="submit" class="btn btn-primary">
                                    {{ __('Login') }}
                                </button>

                                @if (Route::has('password.request'))
                                    <a class="btn btn-link" href="{{ route('password.request') }}">
                                        {{ __('Forgot Your Password?') }}
                                    </a>
                                @endif
                            </div>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>
@endsection

ログイン用controllerを修正

本機能を修正するには、拡張しているAuthenticatesUsersをまず確認する必要があります。

ここには、認証機能の対象とするカラムが下記のように定義されております。

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

これをログイン用controller側で下記のようにオーバーライド致します。

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

これで認証に利用するカラムをログインIDに変更することができました。

ログインID対応後 ログイン画面
ログインID対応後 ログイン画面

これで会員登録とログイン機能に「ログインID」を追加する対応が完了しました。

Laravelログイン機能連載一覧

  • Laravel 8でログイン機能実装1 基本機能
  • Laravel 8でログイン機能実装2 ログインIDの導入 ←いまここ
  • Laravel 8でログイン機能実装3 会員登録時の入力項目追加
  • Laravel 8でログイン機能実装4 ValueObjectとバリデーション
  • Laravel 8でログイン機能実装5 会員情報変更
  • クリックして Twitter で共有 (新しいウィンドウで開きます)
  • Facebook で共有するにはクリックしてください (新しいウィンドウで開きます)

関連記事

Laravel8でログイン機能実装4 値オプジェクト
Laravel8 ログイン機能実装4 値オブジェクトを用いたバリデーション
 2020年9月15日
Laravel8でログイン機能実装1
Laravel8でログイン機能実装1 基本機能導入編
 2020年8月7日
カテゴリー
PHP、Laravel
タグ
login

コメントを残す コメントをキャンセル

PHP
laravelバリデーション 半角英数チェック

前の記事

Laravel 半角英数のバリデーション(alpha_num)
2020年8月12日
副業
副業1年目の収入と戦略を大公開

次の記事

副業SEの収入公開(開始1年)
2020年8月14日

検索

自己紹介

auther

南の島を愛するエンジニア
他にはない一歩踏み込んだ内容を心がけています。PHP/Phtyonでの開発やwordpressのカスタマイズ
【IPA資格マニア】
ITストラテジスト/ ITアーキテクト/ 情報セキュリティスペシャリスト

ココナラで活動中 お仕事のご依頼はこちら
ランサーズはこちら お仕事承ります

人気記事

カテゴリー

  • Python (4)
    • Django (4)
  • システム構築 (6)
  • PHP (16)
    • Laravel (16)
  • wordpress (31)
    • WooCommerce (5)
    • welcart (2)
  • ライフスタイル (1)
    • 副業 (1)
  • セキュリティ (1)
  • 資格 (23)
    • プロジェクトマネージャ (3)
    • システムアーキテクト (3)
    • ITストラテジスト (4)
    • 情報処理安全確保支援士 (12)
  • その他 (6)

タグ

AWS (1) laravel-admin (4) login (3) SalonBookingSystem (5) simple-membership (3) stripe (5) subscription (1) wp-members (10) ドメイン駆動設計 (1) 会員サイト (1)

目次

  • 1 サイト構成
  • 2 実装
    • 2.1 会員登録画面の修正
    • 2.2 会員登録用controllerの修正
    • 2.3 データ生成
    • 2.4 ログイン画面の修正
    • 2.5 ログイン用controllerを修正
  • 3 Laravelログイン機能連載一覧

当サイトについて

TOP |
プライバシーポリシー |
お問合せ

カテゴリー

  • Python
    • Django
  • システム構築
  • PHP
    • Laravel
  • wordpress
    • WooCommerce
    • welcart
  • ライフスタイル
    • 副業
  • セキュリティ
  • 資格
    • プロジェクトマネージャ
    • システムアーキテクト
    • ITストラテジスト
    • 情報処理安全確保支援士
  • その他

タグ

  • laravel
  • login
  • wp-members
  • 会員サイト
  • ドメイン駆動設計
  • simple-membership
  • stripe
  • SalonBookingSystem
  • laravel-admin
  • subscription
  • AWS

最近の投稿

【試験対策】基本情報技術者試験 新方式解説
2022年6月26日
Stripe Apps Stripe APIで会員情報取得
Stripe AppsからStripe API実行【Stripe Appsで決済ワークフロー自動化3】
2022年6月21日
Stripe Appsで決済フロー自動化2
Stripe AppsのUIデザイン【Stripe Appsで決済ワークフロー自動化2】
2022年6月13日
Stripe Appsでワークフロー自動化
Stripe Appsの概要【Stripe Appsで決済ワークフロー自動化1】
2022年6月11日
Stripeロゴ
Stripeセッション2022と最新アップデート
2022年6月4日

Copyright © 南の島のSE エンジニアブログ All Rights Reserved.

MENU
  • HOME