【解決方法】laravelを使用して、ユーザー名の大文字と小文字を区別せず、パスワードの大文字と小文字を区別する方法は?


私は1つのユーザー名を作成しました:ABCとパスワード:MYSQL dbでabc123、私はabc(ユーザー名)とABC123(パスワード)でログインしようとしましたが、ログインできました。

そして、ユーザー名を大文字と小文字でログインできるように大文字と小文字を区別しないようにしたいのですが、パスワードは大文字と小文字を区別して、データベースに保存したものとまったく同じように入力する必要があります

私が試したこと:

この方法を試してみましたが、まだログインできます

 public function login(Request $request)
{

 $check =  DB::table('user')->where('LoginID', strtolower($request->input('username')))->where('Password',$request-
 >input('password'))->get();

}

解決策 1

ユーザー名は簡単です。すべて小文字で (必要に応じて 2 番目のフィールドに) 保存し、比較するだけです。

しかし、パスワードはより複雑です。なぜなら、あなたがしていることは間違っていて、非常に高くつく可能性があるからです。 パスワードをクリア テキストで保存しないでください。これは重大なセキュリティ リスクです。 ここにそれを行う方法に関するいくつかの情報があります: パスワードの保管: 方法。[^] – コードは無視してください。これは C# ベースです。ただし、テキストは引き続き関連しています。 PHP は、使いやすいパスワード ハッシュ関数を提供します。 PHP 5.5 Password Hashing API を使用したパスワードのハッシュ化[^] そして、あなたは本当にそれらを使うべきです。

覚えておいてください: これが Web ベースであり、欧州連合のユーザーがいる場合、GDPR が適用されます。つまり、パスワードを機密データとして扱い、安全な方法で保管する必要があります。 テキストはそれらのどちらでもなく、罰金は….うーん…傑出している可能性があります。 2018 年 12 月、ドイツの会社は、それだけで 20,000 ユーロという比較的低い罰金を科されました。

解決策 2

これは学習面のためのものであり、ベストプラクティスに従うと信じてください.

試す:

PHP
protected function login(Request $request)
{
    $credentials = [
        $this->username() => strtolower($request->input($this->username())),
        'password' => $request->get('password'),
    ];
    
    return $credentials;
}

詳細はこちら: Laravel 5.5認証でメールログインの大文字と小文字を区別しないようにする方法[^]

コメント

タイトルとURLをコピーしました