Laravelログイン再構築

6365 ワード

Laravelを使用してバックグラウンドコンテンツ管理システムを構築する必要がありますが、laravelのデフォルトのログイン登録が現在のニーズを満たすことができなければ、まずメールボックスで登録する必要はありません.ユーザー名などを直接使用してログインや携帯電話番号を使用することもできます.
1.登録ルートの確定
まず、デフォルトのログインルートを見つけなければなりません.そうすれば、ログイン方法のデフォルトのログインルートを直接書き換えることができます.デフォルトのログインルートは、マニュアルで見つけることができます.そうでなければ、\auth\loginを直接入力してから、loginAuth\AuthController@getLoginにアクセスする方法があります.1つはログインページgetリクエストを表示し、1つはログイン使用を要求するpostリクエストですが、このcontrollerを表示すると、この方法が見つからないことに気づきます.これは、この方法が他の場所で実装されているため、現在のところ、どのように実装されているかを議論する必要はありません.興味のあるソースコードを確認することができます.
2.ログインページを表示
これはAuth\AuthController@postLoginという方法を使用していますが、これは実際に変更することがなければ、デフォルトのものを直接使用することができます.書き換える必要はありません.ビューファイルを見つけて、ビューファイルを変更すればいいです.一般的にgetLoginファイル
3.登録を求める
これはresources\views\auth\login.blade.phpという方法を使用しています.これは表名、フィールド名、フィールド、検証などを含めて、私たちの要求に合わないので、書き換える必要がある場合は、postLoginを使用してデータを受信する方法と、requestを使用してデータを受信する方法と、Input::getを使用してデータを取得する方法の2つの方法があります.Requestの場合はuse Illuminate\Http\RequestクラスInputを導入する必要がある場合はuse Inputクラスを導入する必要がありますここではPHPの新しい特性なのでrequestをお勧めします.またRequestクラスで受信する場合は、パラメータにRequest $requestを書き込む必要があります
4.モデルの変更
laravelの公式ドキュメントによると、検証するにはApp\Userクラスが使用されています.ユーザーテーブルやフィールドがmodelと異なる場合は、変更が必要です(ここで説明しますが、変更しなくてもいいです.sessionの方法でユーザー情報をsessionに保存する必要があります.Userを変更するメリットは、laravel内蔵の方法を使用することができます)変更の面では、主にテーブル名、プライマリ・キー、どのフィールドに値を割り当てることができますか.私の例です.

必要に応じて自分と同じデータテーブル名に変更
5.書き換え方法と認証ユーザーpostLoginのメソッド認証を書き換える場合は、laravelが提供するAuth::attempt(['email' => $email, 'password' => $password])のメソッドを使用して認証を行うことができます.メソッドの「email」と「password」の2つの名前を、あなたのデータベースのフィールド名と同じフィールド名(すなわち、ユーザー名とパスワードフィールド)に変更します.
Auth::attempt(['username' => $name, 'password' => $password])

上のように、私のユーザーデータテーブルのユーザー名とパスワードフィールドは「username」と「password」フィールドに対応しています.もし誰かが聞いたら、もし私のユーザー名が1つのフィールド以上でなければ、どうすればいいですか.例えば、emailとphoneの2つのフィールドがユーザー名で、ログインできます.どうすればいいですか.認証例は2回使用できます.
if (Auth::attempt(['email' => $name, 'password' => $password], 1)) {
    return redirect()->intended('/');
} else if (Auth::attempt(['phone' => $name, 'password' => $password], 1)) {
    return redirect()->intended('/');
}

実は、このような使用は全くお勧めしません.前に判断して、どの認証を使うかを決めることができます.
6.認証失敗の返却
上の例は成功例を示していますが、認証に失敗したら?例えば、ユーザー名が正しくなく、パスワードが正しくありません.どうやって返しますか?2つの方法があります.1つ目はValidatorクラスを使用して入力されたデータを検証し、エラー情報を返すことです.もう1つは補助関数を使用してここを完了します.ここはログインなので、特に検証する必要はありません.だから、補助関数を使用して例を完成します.
redirect('login')->withInput($request->except('password'))->with('msg', '        ');
redirectはどのページにリダイレクトするかを示すwithInputはリダイレクト後に格納された使い捨てデータを示し、ここではユーザが入力したデータを過去のexceptメソッドに戻して指定キーを除いたすべての集合項目を返すことを示し、ここでは戻ったデータの中のパスワード項目をwith削除した使い捨てセッションリダイレクト付きデータに与える
7.フロントエンド表示エラーメッセージ
私たちは補助関数を使用してエラーを返すので、私たちが受信すると補助関数も使用してデータを受信します.ここではsession方法を使用してこのエラーを受信します.old('username')を使用して前回出力したデータを受信します.
8.完了後の例
AuthController
public function postLogin(Request $request)
    {
        $name = $request->input('username');
        $password = $request->input('password');
        if( empty($remember)) {  //remember        
            $remember = 0;
        } else {
            $remember = $request->input('remember');
        }
        //           ,        remember_token  
        if (Auth::attempt(['username' => $name, 'password' => $password], $remember)) {  
            return redirect()->intended('/');
        }
        return redirect('login')->withInput($request->except('password'))->with('msg', '        ');
    }

login.blade


Auth::attemptがユーザを認証した後、他のページでAuth::user()を使用してユーザ情報が取得されなければ、App\Userが正しく構成されていない可能性が高い
原文リンク:デニス`s blog