LaravelでユーザーIDのみでログインするのを作る

Laravel5.8で業務で初めてログイン画面を作ってみました。
ただ、要件がイントラ画面なので、ユーザーIDのみでログイン認証をしてほしい、とのこと。つまりパスワードは不要というのが要件なのです。

Laravelは実践では初めてなので、構成などを追うのに苦労しました。
結果、以下の内容でとりあえず動きました。

// web.php
Route::post('/login', 'Auth\LoginController@authenticate');

// LoginController.php

//以下追加
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Models\User;
use Illuminate\Validation\ValidationException;

// 認証用のカスタム関数(POST値を受け取る。ユーザーIDからIDのみを抽出)
public function authenticate(Request $request)
{
  $userid = $request->user_id;
  
  if (isset(User::where('user_id', $request->input('user_id'))->first()->id))
  {

    // 認証成功時、ユーザーIDからIDを取り出す。
    $user_id = User::where('user_id', $request->input('user_id'))->first()->id;
    $id = Auth::loginUsingId($user_id);
    return redirect('/home');

  // 認証失敗時
  } else {
    throw ValidationException::withMessages([
      $this->username() => [trans('auth.failed')],
    ]);
  }
}

結論的には、Auth::loginUsingIdを用いてインデックスのIDのみで認証する、という手段にしました。

User::where('user_id', $request->input('user_id'))->first()->id;

を使うことによって、UserからユーザーIDを条件にIDを取り出します。

カスタマイズするだけでも、ControllerやModel、Viewの場所がどこなのか色々探しながらやりました。middlewareとかも調べておきます。

色々大変でしたが、今後も頑張っていきたいと思います。

いいなと思ったら応援しよう!