0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Laravel5.6のログイン認証でDBのテーブルとフィールドを変更する(passwordフィールドも変更)その1

Last updated at Posted at 2018-07-06

初投稿です。 よろしくお願いします。
laravel5.6での開発を行うことになったので、備忘録をかねての投稿です。

前提として、php artisan make:auth を実行済み

DB:MySQL5.5
認証で使用するテーブル名:STORE
認証で使用するフィールド名:STORE_ID、STORE_PASS(Bcryptされていない、かつBcryptしないでほしいとのこと)

※2018/7/10 追記
vendor以下のファイル(EloquentUserProvider.php)を修正しなくてもいいように、下記の記事に記載しました。
Laravel5.6のログイン認証でDBのテーブルとフィールドを変更する(passwordフィールドも変更)その2

###編集するファイル

  • app\User.php
  • app\Http\Controllers\Auth\LoginController.php
  • app\Providers\AppServiceProvider.php
  • vendor\laravel\framework\src\Illuminate\Auth\EloquentUserProvider.php
  • resources\views\auth\login.blade.php

※ソースコードの部分は、追記と変更箇所を記載しているだけです。
use部分や変更なしのコード部分は省略しています。

User.php
    //追記する部分
    //テーブル名の指定
    protected $table = 'STORE';

    protected $guarded = array('STORE_ID','STORE_PASS');

    //パスワードの取得部分
    public function getAuthPassword()
    {
        //STOREテーブルでBcryptされていないので、ここでする。
        //Bcryptされているフィールドの場合は、Hash::makeを使用しない
        $hash_pass = Hash::make($this->STORE_PASS);
        return $hash_pass;
    }

    //変更する部分
    protected $fillable = [
        //'name', 'email', 'password',
        'STORE_ID', 'STORE_PASS',
    ];

    //今回はremember_tokenも使わないので、コメントアウトしてます。
    protected $hidden = [
        //'password',
        'STORE_PASS',
        //'remember_token',
    ];
LoginController.php
    //追記する部分
    //実際のログイン処理
    public function login(Request $request)
    {
        $message = '';
        if ($request->isMethod('post')) {

            $authinfo =[
                'STORE_ID' => $request->STORE_ID,
                'STORE_PASS' => $request->STORE_PASS
            ];

            if (Auth::attempt($authinfo)){
                //認証成功時のとび先(環境に合わせて変更してください)
                $message = 'validate ok!';
                return view('home',[
                    'message' => $message
                ]);
            }else{
                $message = 'ログインに失敗しました。';
            }
        }

        //認証失敗時のとび先(環境に合わせて変更してください)
        return view('auth.login',[
            'message' => $message
        ]);

    }

    public function STORE_ID()
    {
        return 'STORE_ID';
    }

    public function STORE_PASS()
    {
        return 'STORE_PASS';
    }
AppServiceProvider.php
    //追記する部分
    public function boot()
    {
        //MySQLのバージョンが古かったので、追記
        Schema::defaultStringLength(191);
    }
EloquentUserProvider.php

   //変更する部分
    /**
     * Validate a user against the given credentials.
     *
     * @param  \Illuminate\Contracts\Auth\Authenticatable  $user
     * @param  array  $credentials
     * @return bool
     */
    public function validateCredentials(UserContract $user, array $credentials)
    {

        //ここでエラーが出てしまい、うまい解決策をまだ模索中なので直接変更してます。
        //$plain = $credentials['password'];
        $plain = $credentials['STORE_PASS'];
        
        return $this->hasher->check($plain, $user->getAuthPassword());
    }
login.blade.php
@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">{{ __('ログイン画面') }}</div>

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

                            @if (isset($message))
                            <div class="form-group row">
                                {{$message}}<br />
                            </div>
                            @endif

                        <div class="form-group row">
                            <label for="STORE_ID" class="col-sm-4 col-form-label text-md-right">{{ __('ログインID') }}</label>

                            <div class="col-md-6">
                                <!-- <input id="STORE_ID" type="text" class="form-control{{ $errors->has('STORE_ID') ? ' is-invalid' : '' }}" name="STORE_ID" value="{{ old('STORE_ID') }}" required autofocus> -->
                                     <input id="STORE_ID" type="text" class="form-control" name="STORE_ID" value="{{ old('STORE_ID') }}" required autofocus>
                                @if ($errors->has('STORE_ID'))
                                    <span class="invalid-feedback">
                                        <strong>{{ $errors->first('STORE_ID') }}</strong>
                                    </span>
                                @endif
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="STORE_PASS" class="col-md-4 col-form-label text-md-right">{{ __('パスワード') }}</label>

                            <div class="col-md-6">
                                <input id="STORE_PASS" type="password" class="form-control{{ $errors->has('STORE_PASS') ? ' is-invalid' : '' }}" name="STORE_PASS" required>

                                @if ($errors->has('STORE_PASS'))
                                    <span class="invalid-feedback">
                                        <strong>{{ $errors->first('STORE_PASS') }}</strong>
                                    </span>
                                @endif
                            </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>

                            </div>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>
@endsection

以上になります。
もっといいやり方やご指摘等ありましたら、コメントいただけると嬉しいです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?