ホームページ  >  記事  >  PHPフレームワーク  >  カスタマイズされたニーズに合わせてlaravelでログイン検証を変更する方法

カスタマイズされたニーズに合わせてlaravelでログイン検証を変更する方法

PHPz
PHPzオリジナル
2023-04-21 10:06:57786ブラウズ

Laravel は、Web アプリケーションを構築するための便利な機能を多数提供する非常に人気のある PHP フレームワークです。その中でも、Laravel独自のユーザー認証システムは、開発者がWebアプリケーションを構築する際に非常に基本的な機能です。デフォルトでは、Laravel のユーザー認証システムはログイン時にユーザーを認証しますが、場合によってはニーズに合わせて変更する必要があります。

この記事では、カスタマイズされたニーズに合わせて Laravel ユーザーのログイン認証を変更する方法を紹介します。読者に 2 つの一般的なシナリオを提供し、これらの状況を解決する方法について説明します:

  1. ユーザーのログイン時に追加の検証条件を追加したい;
  2. パスワードが次のとおりであることを検証したいログイン後に期限切れになりました。有効期限が切れた場合、ユーザーはパスワードをリセットする必要があります。

1. 追加の検証条件を追加する

Laravel のデフォルトのユーザー認証システムでは、ユーザーは正しいメールアドレスとパスワードを入力するだけでログインを完了できます。ただし、対象を絞った検証のためにユーザーに追加情報の提供が必要になる場合があります。

たとえば、ユーザーがロボットではないことを確認するために、セキュリティの質問に対する回答をユーザーに要求します。この照合は、ユーザーが保存した秘密の質問と回答をデータベースから取得し、ユーザーが提供した情報と比較することで実行できます。この検証を実装する方法は次のとおりです。

まず、LoginControllerlogin メソッドをオーバーライドして、セキュリティの質問の答えを検証する必要があります。次のように記述できます。

public function login(Request $request)
{
    $answer = $request->input('answer');
    $user = User::where('email', $request->email)->first();
  
    if (!$user) {
        return redirect()->route('login')
            ->withInput($request->only('email', 'remember'))
            ->withErrors([
                'email' => 'The provided credentials are incorrect.',
            ]);
    }

    if ($user->isRobot() || $user->answer !== $answer) {
        return redirect()->route('login')
            ->withInput($request->only('email', 'remember'))
            ->withErrors([
                'email' => 'The provided credentials are incorrect.',
            ]);
    }

    if (Auth::attempt(['email' => $request->email, 'password' => $request->password], $request->remember)) {
        return redirect()->intended('/dashboard');
    }

    return redirect()->route('login')
        ->withInput($request->only('email', 'remember'))
        ->withErrors([
            'email' => 'The provided credentials are incorrect.',
        ]);
}

上記のコードでは、まずユーザーから提供された回答を取得し、次にデータベースからユーザーを検索します。ユーザーが存在しない場合は、すぐにログイン ページに戻り、提供された資格情報が間違っていることをユーザーに伝えます。

ユーザーがロボットとしてマークされている場合、または提供された回答がデータベース内のフィールドと一致しない場合も、ユーザーをログイン ページにリダイレクトします。

ただし、ユーザーがセキュリティの質問の検証に合格した場合は、Auth::attempt() メソッドを呼び出してユーザーのログインを試行します。ログインが成功すると、ユーザーは最初に要求したページにリダイレクトされます。

2. パスワードの有効期限の検証

アプリケーションでパスワードの有効期限チェック機能が必要な場合は、Laravel の Auth モジュールを使用してユーザーのパスワードの有効期限のタイムスタンプをチェックできます。タイムスタンプがパスワードの有効期限が切れていることを示している場合は、ユーザーにパスワードをリセットするよう求めることができます。

まず、User モデルにパスワード有効期限タイムスタンプ フィールドを追加する必要があります:

protected $dates = ['password_updated_at'];

次に、Authenticatable インターフェイスで hasPasswordExpired( をオーバーライドする必要があります。 )メソッド:

public function hasPasswordExpired()
{
    $expirationDate = Carbon::now()->subDays(config('auth.password_expiration_days'));
    return $this->password_updated_at->lt($expirationDate);
}

上記のコードでは、まずパスワードの有効期限が切れる前の現在時刻と日付を取得し、それを有効期限変数に代入します。次に、パスワード更新のタイムスタンプと有効期限を比較します。パスワードの有効期限タイムスタンプが有効期限より前の場合、パスワードは期限切れです。

次に、LoginControllerlogin() メソッドを更新して、パスワードの有効期限の検出を有効にする必要があります。これを行うには、次のコード スニペットを追加する必要があります。

public function login(Request $request)
{
    $credentials = $request->only('email', 'password');

    if (Auth::attempt($credentials)) {
        if (Auth::user()->hasPasswordExpired()) {
            Auth::logout();
            return redirect('login')->withErrors(['password' => 'Your password has expired. Please reset it.']);
        }

        return redirect()->intended('/dashboard');
    }

    return redirect('login')->withErrors(['email' => 'Your email or password is incorrect.']);
}

上記のコードでは、ユーザーのログイン後にパスワードの有効期限が切れた場合、エラー メッセージを含むリダイレクト応答が返されます。ユーザーはアプリケーションの使用を続けるためにパスワードのリセットを実行する必要があります。

概要:

上記は、2 つの一般的な状況で Laravel ユーザーのログイン検証を変更するためのソリューションです。最初のケースは、ユーザーがログインするときに追加の検証条件を追加するもので、セキュリティの質問を使用してユーザーが人間であるかどうかを検証します。 2 番目の状況は、ログイン後にパスワードの有効期限が切れているかどうかを確認することです。有効期限が切れた場合、ユーザーはパスワードをリセットする必要があります。

Laravel のデフォルトの認証システムは非常に強力で、さまざまな種類のアプリケーションのニーズを満たす多くの機能とオプションが含まれています。これを変更および拡張することで、特定のニーズに適合させることができます。

以上がカスタマイズされたニーズに合わせてlaravelでログイン検証を変更する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。