[Laravel7의 사용자 인증_3] 사용자 인증을 메일 주소에서 사용자 이름으로 변경

11268 단어 LaravelLaravel7

입문


Laravel 7에서 만든 사용자 인증은 전자 우편 주소와 비밀번호로 로그인하여 사용자 이름과 비밀번호로 변경하는 방법을 정리합니다.
  • 사용자 이름이 "username"인 열을 다시 만듭니다.
  • username는 반각 영수와 하이픈, 밑줄만 허용합니다.
  • username는 필수 항목으로 유일하다.
  • 문자 길이는 1 ~ 32자 이내로 입력할 수 있습니다.
  • 환경


    XAMPP 환경에서 Laravel을 사용할 수 있도록 설정합니다.
    Windows10 Pro 64bit
    PHP 7.3.18
    Laravel 7.12.0
    MariaDB 10.1.32
    또한 Laravel 프로젝트는 다음 절차에 따라 사용자 인증을 일본어로 합니다.
  • [Laravel7의 사용자 인증_1] 기본
  • 【Laravel7의 사용자 인증_2】 사용자 인증을 일본어로 만들기
  • users 테이블에username 추가


    사용자 테이블에 사용자 이름을 추가하는 데 사용할 마이그레이션 파일을 만듭니다.
    $ php artisan make:migration add_username_to_users --table=users
    
    database/migrations 에서 마이그레이션 파일을 작성하므로 추가 username 열의 내용을 작성해야 합니다.
    database/migrations/날짜_add_username_to_users.php
          /**
           * Run the migrations.
           *
           * @return void
           */
          public function up()
          {
              Schema::table('users', function (Blueprint $table) {
    -             //
    +             //文字長32、ユニーク制約、idカラムの直後に追加、コメント「ユーザー名」でusernameカラム追加
    +             $table->string('username', 32)->unique('users_username_unique')->after('id')->comment('ユーザー名');
              });
          }
    
          /**
           * Reverse the migrations.
           *
           * @return void
           */
          public function down()
          {
              Schema::table('users', function (Blueprint $table) {
    -             //
    +             $table->dropColumn('username');
              });
          }
    
    데이터베이스에 반영합니다.
    $ php artisan migrate
    
    username 열이 추가되었습니다.

    새 등록에 사용자 이름 항목 추가


    사용자를 등록할 때 사용자 이름을 입력해야 합니다.

    뷰 변경


    등록 화면에 사용자 이름 입력을 추가합니다.
    이번에는 비밀번호에 항목을 추가했습니다.
    resources/views/auth/register.blade.php
      @extends('layouts.app')
    
      @section('content')
      <div class="container">
    
     ~~~(略)~~~
    
                              <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="name" class="col-md-4 col-form-label text-md-right">ユーザー名</label>
    +
    +                             <div class="col-md-6">
    +                                 <input id="username" type="text" class="form-control @error('username') is-invalid @enderror" name="username" value="{{ old('username') }}" required autocomplete="username">
    +
    +                                 @error('username')
    +                                     <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>
    
    {{ __('UserName') }}에 번역 문자열resources/lang/ja.json을 추가합니다.
    (일본어화 정보 → 【Laravel7의 사용자 인증_2】 사용자 인증을 일본어로 만들기
    resources/lang/ja.json
     {
    +    "UserName": "ユーザー名",
         "Register": "ユーザー登録",
         "Name": "氏名",
    

    사용자 모델 변경


    사용자 모델에 사용자 이름을 추가합니다.
    app/User.php
         /**
          * The attributes that are mass assignable.
          *
          * @var array
          */
         protected $fillable = [
    -        'name', 'email', 'password',
    +        'name', 'email', 'password', 'username',
         ];
    

    컨트롤러 변경


    사용자 등록 컨트롤러 파일에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'],
    +            'username' => ['required', 'string', 'max:32', 'unique:users', 'regex:/^[a-zA-Z0-9-_]+$/],
             ]);
         }
    
         /**
          * 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']),
    +            'username' => $data['username'],
             ]);
          }
      }
    
    
    여기까지 할 수 있다면 등록해 볼게요.
    검증 오류가 표시되는지 확인하려면 반각 이외의 문자 문자열을 입력합니다.

    전각 문자를 입력하면 "username에 정확한 형식을 입력하십시오."라고 표시되기 때문에 사용자 정의 검증 속성 이름에 username을 추가합니다.
    (일본어화 정보 → 【Laravel7의 사용자 인증_2】 사용자 인증을 일본어로 만들기
    resources/lang/ja/validation.php
         /*
         |--------------------------------------------------------------------------
         | カスタムバリデーション属性名
         |--------------------------------------------------------------------------
         |
         | 以下の言語行は、例えば"email"の代わりに「メールアドレス」のように、
         | 読み手にフレンドリーな表現でプレースホルダーを置き換えるために指定する
         | 言語行です。これはメッセージをよりきれいに表示するために役に立ちます。
         |
         */
    
         'attributes' => [
           "name" => "氏名",
           "email" => "メールアドレス",
           "password" => "パスワード",
           "password_confirmation" => "パスワード(確認用)",
    +      "username" => "ユーザー名",
         ],
    
    등록에 문제가 없으면 다음 로그인 부분을 변경해야 합니다.

    로그인에 필요한 항목을 전자 메일 주소에서 사용자 이름으로 변경


    뷰 변경


    로그인 화면에 입력한 항목으로 메일 주소에서 사용자 이름으로 변경됩니다.
    resources/views/auth/login.blade.php
                          <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">{{ __('E-Mail Address') }}</label>
    +                             <label for="email" class="col-md-4 col-form-label text-md-right">{{ __('UserName') }}</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" autofocus>
    +                                 <input id="username" type="username" class="form-control @error('username') is-invalid @enderror" name="username" value="{{ old('username') }}" required autocomplete="username" autofocus>
    - 
    -                                 @error('email')
    +                                 @error('username')
    
                                          <span class="invalid-feedback" role="alert">
                                              <strong>{{ $message }}</strong>
                                          </span>
                                      @enderror
                                  </div>
                             </div>
    
    

    컨트롤러 변경


    로그인 컨트롤에 함수 resources/lang/ja/validation.php 를 추가합니다.
    로그인할 열 이름이 username() 또는 userid 이면 함수 이름이 loginname 로 유지되고 리턴이 되돌아오는 값을 각 열 이름으로 변경합니다.
    app/Http/Controllers/Auth/LoginController.php
          /**
           * Create a new controller instance.
           *
           * @return void
           */
          public function __construct()
          {
              $this->middleware('guest')->except('logout');
          } 
    +  
    +     public function username()
    +     {
    +       return 'username';
    +     }
    
      }
    
    
    위의 작업을 통해 사용자 이름과 비밀번호를 사용하여 로그인할 수 있습니다.

    웹 페이지 정보

  • PHP 프레임워크 Laravel 시작 #7 로그인 기능 및 사용자 정의 방법
  • 좋은 웹페이지 즐겨찾기