初投稿です。 よろしくお願いします。
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
以上になります。
もっといいやり方やご指摘等ありましたら、コメントいただけると嬉しいです。