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

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

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

PHP
  1. HOME
  2. PHP
  3. Laravel 8でログイン機能実装2 ログインID導入
2020年8月12日 / 最終更新日 : 2022年8月8日 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 で共有するにはクリックしてください (新しいウィンドウで開きます)

関連記事

LaravelとAmazon Cognitoでログイン実装
Laravelで Amazon Cognito ログイン認証2【会員登録機能】
 2022年9月2日
Laravel8でログイン機能実装5 会員情報更新
Laravel 8で会員サイト構築5 会員情報更新機能
 2020年9月19日
Laravel8でログイン機能実装4 値オプジェクト
Laravel8 ログイン機能実装4 値オブジェクトを用いたバリデーション
 2020年9月15日
Laravel8でログイン機能実装3
Laravel 8でログイン機能実装3 会員登録項目追加
 2020年8月31日
Laravel8でログイン機能実装1
Laravel8でログイン機能実装1 基本機能導入編
 2020年8月7日
カテゴリー
PHP、Laravel
タグ
ログイン

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

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

前の記事

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

次の記事

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

検索

自己紹介

auther

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

ココナラで活動中 お仕事のご依頼はこちら

【お友達紹介キャンペーン】ここから会員登録で1,000ポイント獲得

ランサーズはこちら お仕事承ります

人気記事

カテゴリー

  • システム構築 (5)
  • AWS (7)
    • コスト最適化 (1)
  • Python (4)
    • Django (4)
  • PHP (19)
    • Laravel (18)
  • wordpress (31)
    • WooCommerce (5)
    • welcart (2)
  • ライフスタイル (1)
    • 副業 (1)
  • セキュリティ (1)
  • 資格 (37)
    • 基本情報技術者試験 (3)
    • プロジェクトマネージャ (7)
    • システムアーキテクト (3)
    • ITストラテジスト (6)
    • 情報処理安全確保支援士 (17)
  • その他 (7)

タグ

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

目次

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

当サイトについて

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

カテゴリー

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

タグ

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

最近の投稿

ITストラテジスト午後2 令和4年
ITストラテジスト試験 令和4年午後2論述解説
2023年3月19日
【AWS】VPCリソースマップがイケてる【VPC可視化】
2023年3月12日
基本情報技術者試験解説 科目A
【2023新試験】基本情報技術者試験サンプル問題(科目A試験)
2023年2月26日
AWS budgetsで予算管理
【事例で学ぶ】AWS Budgetsを利用した予算設定
2023年2月18日
プロジェクトマネージャ試験令和4年度秋季 午後1問3解答速報
【解答・解説】プロジェクトマネージャ 令和4年度秋季【午後1問3】
2022年10月15日

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

MENU
  • HOME