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とかも調べておきます。
色々大変でしたが、今後も頑張っていきたいと思います。