前提
emailとパスワードでログインをしていたLaravelのシステムがあります。
この度、新たにカラムを追加したユーザーID (カラム名:admins_id)とパスワードでログインを可能にしたいです。
下記コードを試しましたが、ログインしようとすると、「ログイン情報が登録されていません」というバリデーションエラーが出ます。
IDとパスワードのうち間違えではなさそうです。
どこかおかしい箇所はありますでしょうか。
カラムの作成および新規ユーザーはphpmyadminで挿入しました。
adminsの構造
該当のソースコード
app/Http/Controllers/Admin/Auth/LoginController.php
php
<?phpnamespace App\Http\Controllers\Admin\Auth;use App\Http\Controllers\Controller;use App\Providers\RouteServiceProvider;use Illuminate\Foundation\Auth\AuthenticatesUsers;use Illuminate\Http\Request;use Illuminate\Support\Facades\Auth;class LoginController extends Controller{ use AuthenticatesUsers; * Where to redirect users after login. * protected $redirectTo = RouteServiceProvider::ADMIN_HOME; * Create a new controller instance. * public function __construct() { $this->middleware('guest:admin')->except('logout'); } * Get the guard to be used during registration. * protected function guard() { return Auth::guard('admin'); } * Show the application's login form. * public function showLoginForm() { return view('admin.auth.login'); } public function username(){ // emailの代わりに使用したいカラム名を指定する return 'admins_id'; } protected function attemptLogin(Request $request) { $username = $request->input($this->username()); $password = $request->input('password'); if (filter_var($username, \FILTER_VALIDATE_EMAIL)) { $credentials = ['email' => $username, 'password' => $password]; } else { $credentials = [$this->username() => $username, 'password' => $password]; } return $this->guard()->attempt($credentials, $request->filled('remember')); } * Get the needed authorization credentials from the request. * protected function credentials(Request $request) { return array_merge( $request->only($this->username(), 'password'), ['area_id' => config('constants.AREA_ID')] ); return $request->only($this->username(), 'password'); } // ログアウト処理 public function logout(Request $request) { Auth::guard('admin')->logout(); return $this->loggedOut($request); } // ログアウトした時のリダイレクト先 public function loggedOut(Request $request) { return redirect(route('admin.login')); }}
app/User.php
php
<?phpnamespace App;use Illuminate\Contracts\Auth\MustVerifyEmail;use Illuminate\Foundation\Auth\User as Authenticatable;use Illuminate\Notifications\Notifiable;class User extends Authenticatable{ use Notifiable; protected $fillable = [ 'name', 'admins_id', 'email', 'password', ]; protected $hidden = [ 'password', 'remember_token', ]; protected $casts = [ 'email_verified_at' => 'datetime', ];}
resources/views/admin/auth/login.blade.php
php
@extends('layouts.admin.app') @section('main') <div class="l-login"> <div class="l-login__logo"><img src="{{ asset('/assets/img/common/logo.svg') }}" alt=""><span class="area">【{{ config('constants.AREA_NAME') }}版】</span></div> <form method="POST" action="{{ route('admin.login') }}"> @csrf <div class="c-form__login_email"> <input id='admins_id' type="text" name="admins_id" class="c-form__control @error('admins_id') is-invalid @enderror" value="{{ old('admins_id') }}" autofocus> </div> {{-- <div class="c-form__login_email"> <input type="email" name="emails" class="c-form__control" placeholder="メールアドレス" value="{{ old('email') }}" autofocus> </div> --}} <div class="c-form__login_password"> <input type="password" name="password" class="c-form__control @error('password') is-invalid @enderror" placeholder="パスワード"> </div> <div class="c-form__login_remember"> <label><input type="checkbox" name="remember" id="remember" {{ old('remember') ? 'checked' : '' }}> ログイン状態を保存する</label> </div> @error('admins_id') <div class="c-form__invalid_feedback">{{ $message }}</div> @enderror @error('password') <div class="c-form__invalid_feedback">{{ $message }}</div> @enderror <div class="c-buttons"> <button type="submit" class="c-button c-button__action">ログイン</button> </div> </form> </div> @endsection
補足情報(FW/ツールのバージョンなど)
Laravel: 7.16.1
0 コメント