Laravel登録再構築

11032 ワード

Laravelを使用してバックグラウンドコンテンツ管理システムを構築する必要がありますが、laravelのデフォルトのログイン登録が現在のニーズを満たすことができない場合は、バックグラウンドで使用され、メールボックスで登録する必要がなく、登録時に一緒に記入する必要がある追加の構成があります.
1.まず、ユーザ登録の経路を決定する
私たちはlaravelをインストールするときにデフォルトで生成された登録はメールボックスで登録されています.また、いくつかのオプションは必要ありません.いくつかのフォームオプションを追加する必要があります.私たちが登録する必要がある場合は、勝手に登録することはできません.いくつかのスーパー管理者だけが登録を行うことができます.まず、前回作成したUserControllerを使用して構成します.もしなければ、php artisan make:controller UserControllerを使用してコントローラクラスを作成し、2つのルーティングRoute::get('register', 'UserController@getRegister')およびRoute::post('register', 'UserController@postRegister')を作成することができます.前者は、登録されたページget要求を表示し、後にアカウントを登録するpost要求を表示します.
2.登録アカウントページを表示する
これはgetRegisterという方法を用いており,この方法は1つのビューを表示するだけで特に論理的ではない.
    public function getRegister()
    {
        return view('auth.register');
    }

3.アカウントの登録を要求する
これはpostRegisterという方法でアカウントを登録するとパスワードをリセットするのと同じで、登録アカウントよりも簡単です.データベースにユーザーレコードを挿入するときは、User::create($data)を使用して挿入できます.$dataは配列で、各フィールドのキーと値が格納されています.
    public function postRegister(Request $request)
    {
        $rules = [
            'username'=>'required|unique:finance_enewsuser',
            'password' => 'required|between:6,20|confirmed'
        ];
        $messages = [
            'required'=>':attribute    ',
            'unique'=>'       ',
            'between' => '     6~20   ',
            'confirmed' => '           '
        ];
        $username = $request->input('username');
        $password = $request->input('password');
        $group = $request->input('group');
        $data = $request->all();
        $validator = Validator::make($data, $rules, $messages);
        if ($validator->fails()) {
            return back()->withErrors($validator);
        }
        $data = [
            'username' => $username,
            'password' => bcrypt($password),
            'groupid' => $group,
            'checked' => 0,
            'styleid' => 1,
            'filelevel' => 0,
            'loginnum' => 0,
            'lasttime' => time(),
            'lastip' => '127.0.0.1',
            'truename' => '',
            'email' => '',
            'pretime' => time(),
            'preip' => '127.0.0.1',
        ];
        User::create($data); //       ,           
        //             ,    $user = User::create($data); Auth::login($user);     
        return redirect('/');
    }

4.完了後の例
UserController
    public function getRegister()
    {
        return view('auth.register');
    }

    public function postRegister(Request $request)
    {
        $rules = [
            'username'=>'required|unique:finance_enewsuser',
            'password' => 'required|between:6,20|confirmed'
        ];
        $messages = [
            'required'=>':attribute    ',
            'unique'=>'       ',
            'between' => '     6~20   ',
            'confirmed' => '           '
        ];
        $username = $request->input('username');
        $password = $request->input('password');
        $group = $request->input('group');
        $data = $request->all();
        $validator = Validator::make($data, $rules, $messages);
        if ($validator->fails()) {
            return back()->withErrors($validator);
        }
        $data = [
                    'username' => $username,
                    'password' => bcrypt($password),
                    'groupid' => $group,
                    'checked' => 0,
                    'styleid' => 1,
                    'filelevel' => 0,
                    'loginnum' => 0,
                    'lasttime' => time(),
                    'lastip' => '127.0.0.1',
                    'truename' => '',
                    'email' => '',
                    'pretime' => time(),
                    'preip' => '127.0.0.1',
                ];
        User::create($data); //       ,           
        return redirect('/');
    }

register.blade
    

5.ミドルウェア--ユーザーはログインする必要があります
今登録が完了したので、ユーザーの判断が悪くなりました.登録する必要があるアカウントは、スーパー管理者権限のあるアカウントでなければ登録できません.この場合、postRegisterの方法でユーザーの情報を直接検出し、ユーザーがこの権限を満たしているかどうかを確認し、満たされていない場合は他のページにジャンプします.この方法は可能ですが、スーパー管理者と管理者の権限区分がある以上、1つの場所だけでなく、他の場所でも使用されるに違いありません.そしてmodelにメソッドを書くことを考えている人がいて、後で必要があれば直接呼び出すことができます.この方法も可能ですが、laravelが提供するミドルウェアという機能をお勧めします.この機能は非常に強く、非常に使いやすいです.ミドルウェアという機能を使用します.バックグラウンドコンテンツ管理システムなので、まずミドルウェアを作成します.機能は、すべてのページが入る前に、ログイン状態でなければなりません.そうしないと、ログインページにジャンプします.マニュアルを見ると、php artisan make:middleware CheckLoginMiddlewareコマンドを使用してミドルウェアを作成することができます.もちろん、ほとんどのファイルをコピーしても、変更しても同じです.app/Http/Middleware/ディレクトリの下にCheckLoginMiddlewareミドルウェアファイルが作成されます.handle()メソッドは1つしかありません.私たちは直接機能を追加します.
   is('login')     URL      
           //           ,  ,        ,        
           //         /login,  /auth/login  ,  $request->is('auth/login')
           //                ,                
           $response = $next($request);
           if (!Auth::check() && !$request->is('login')) {
               return redirect('/login');
           }
           return $response;
       }
   }

このミドルウェアの機能は,ルーティングが発生した場合,まずAuth::check()を用いてユーザがログインしているか否かを判断し,ログインしていない場合はログインページにジャンプすることである.方法は書き終わりましたが、まだ使えません.私たちはこのミドルウェアを登録して、フレームワークにこのミドルウェアが書き終わったことを教えて、使えます.使用範囲はどこですか.app/Http/ディレクトリの下にKernel.phpファイルがこのミドルウェアを登録しています.つまり、フレームワークに教えて、私たちはこのミドルウェアを書きました.Kernel.phpファイルには2つの配列属性があり、1つの$middlewareはグローバル使用を表し、1つの$routeMiddlewareは選択可能使用を表す.グローバルに使用すると、どのページを要求しても、このミドルウェアが先に実行されます.使用表示を選択し、どのHTTPリクエストが必要なのか、ミドルウェアを実行する必要があるのか、どこで実行するのかを選択します.ここで各ページにログインが必要な場合は、グローバルに登録し、$middleware配列のプロパティに1つ追加することができます.
\App\Http\Middleware\CheckLoginMiddleware::class

登録して、使えます
PS:ログインページを除外するなど、グローバルを定義する場合は特に注意してください.そうしないと、ユーザーがログインしていないため、どのページでもログインページにリダイレクトされます.もちろん、ログインページも含まれます.
5.ミドルウェア--特別なページでユーザーグループを検証する必要がある
ユーザー権限ページの制限を行います.同様に、php artisan make:middleware CheckGroupMiddlewareを使用して新しいミドルウェアを作成し、このユーザーがこの権限を満たしているかどうかを判断するために、ミドルウェアを再作成します.
    groupid != 1) {
                return redirect('/');
            }
            return $next($request);
        }
    }

ここでは,Auth::user()によりユーザの情報を取得し,ユーザのグループに属していないと判断してトップページにジャンプする.次に、app/Http/ディレクトリの下にKernel.phpファイルがこのミドルウェアに登録されています.今回は選択可能なミドルウェアに登録します.このミドルウェアは選択可能なので、$routeMiddleware配列の属性に別名を付ける必要があります.
    'user.group' => \App\Http\Middleware\CheckGroupMiddleware::class
usergroupという名前で使用できるミドルウェアを作成します.作成後、router.phpのルーティングファイルに追加され、controllerでrouter.phpのファイルで使用される場所を選択できます.
    Route::get('/', ['middleware' => ['user.group'], function () {
        //
    }]);

コントローラ内での使用
    $this->middleware('user.group');

ここでは、ルーティングにミドルウェアを追加することを選択します.登録ページはスーパーアドミニストレータのみで登録できます
    Route::get('register', 'UserController@getRegister')->middleware('user.group');
    Route::post('register', 'UserController@postRegister')->middleware('user.group');

私たちは現在2つのルートしか判断できないので、チェーン式の書き方を使っています.もちろん、マニュアルに従ってグループを使うこともできます.グループのやり方はもっと優雅です.
もちろん、コントローラ全体のメソッドに検証フィルタリングが必要な場合は、グループの形式を作成したり、コントローラ内で__constructメソッドを直接使用したりして、このコントローラを要求するたびに、ミドルウェアを先に実行することもできます.
    class MyController extends Controller
    {
        public function __construct()
        {
            $this->middleware('user.group');
        }
    
        public function index()
        {
            return view('my.index');
        }
    }

原文リンク:デニス`s blog