ホームページ > 記事 > PHPフレームワーク > laravel-adminを例として、Laravelのシングルユーザーログインについて詳しく説明します。
この記事では、Laravel に関する関連知識を提供します。主にシングルユーザー ログインに関する問題を紹介します。laravel-admin を例として、シングルユーザー ログインに関する関連内容を見てみましょう。お役に立てば幸いです。みんなに、役に立ちました。
【関連する推奨事項: laravel ビデオチュートリアル ]
シングルユーザー ログインという用語は誰もが聞いたことがあるでしょう。なぜ必要なのでしょうか。シングルユーザー? ログイン? たとえば、ビデオ Web サイトで、アカウントに VIP がチャージされ、そのアカウントを他のユーザーと共有すると、他のユーザーも VIP 権限を持つことになり、会社の利益が損なわれることになります。アカウントは 1,000 人、10,000 人に分割されており、この損失は小さくないため、今日は単一ユーザーのログインについて説明します。 #Login
use Illuminate\Support\Facades\Session; use Illuminate\Support\Facades\Redis;
if ($this->guard()->attempt($credentials, $remember)) { // return $this->sendLoginResponse($request);//此注释修改为以下 return $this->sendLoginResponse($request,$credentials); }sendLoginResponse() メソッドの変更
protected function sendLoginResponse(Request $request,$credentials) { admin_toastr(trans('admin.login_successful')); $request->session()->regenerate(); // return redirect()->intended($this->redirectPath()); // 制作 token return $this->createtoken($credentials,$request); }createtoken() メソッドの追加
protected function createtoken($credentials,$request){ //相同局域网下多设备通用token if(!Redis::get('STRING_SINGLETOKEN_MAJOR_'. $credentials['username'])){ $time = time(); // 当前 time 存入 Redis Redis::set('STRING_SINGLETOKEN_MAJOR_'. $credentials['username'], $time); } //局域网不通用 但设备使用 注释上边多设备使用 // $time = time(); $time=Redis::get('STRING_SINGLETOKEN_MAJOR_'. $credentials['username']); // md5 加密 $singleToken = md5($request->getClientIp() . $credentials['username'] . $time .'onlykey'); Redis::set('SINGLETOKEN_MAJOR_'. $credentials['username'],$singleToken); // 用户信息存入 Session Session::put('user_login', $credentials['username']); return redirect()->intended($this->redirectPath()); }ログインに成功したら、現在のタイムスタンプを取得し、IP、時刻、onlykey を介してユーザー名と一意の盗難防止文字列 Onlykey をクエリし、MD5 暗号化を実行して、TOKEN を取得します。次に、取得したタイムスタンプとトークンを Redis に保存します。後でミドルウェアでの TOKEN 検証を容易にするために、Redis キーがユーザー名と文字列に連結されます。その後、ユーザー情報を Session.Create middleware # に保存します。 ## ミドルウェアとは、平たく言えば、メソッドにアクセスする際に、事前にミドルウェアの内容を検証し、検証後、アクセスしたいメソッドにアクセスできるようにするものです。 ##ミドルウェアを作成するコマンド
// 项目根目录运行 php artisan make:middleware SsoMiddleware上記のコマンドは、app/Http/Middleware に SsoMiddleware.php ファイルを生成し、ミドルウェアを app/Http/Kernel.phpprotected $ に追加します。 RouteMiddleware = [] を追加し、次の行を追加します
'SsoMiddleware' => \App\Http\Middleware\SsoMiddleware::class,次にミドルウェアに移動し、プログラム app/Http/Middleware/SsoMiddleware.php を記述します。ファイルにはハンドル メソッドがあります。このメソッドにロジックを記述します。 .
public function handle($request, Closure $next) { $prefix=config('admin.route.prefix'); $array=['/'.$prefix.'/auth/login','/'.$prefix.'/auth/logout','/'.$prefix.'/auth/clearsession']; $username= Session::get('user_login'); $url=$request->getRequestUri(); if(in_array($url,$array)){ return $next($request); exit; } if ($username) { // 获取 Cookie 中的 token $singletoken = Redis::get('SINGLETOKEN_MAJOR_'.$username); if ($singletoken) { // 从 Redis 获取 time $redisTime = Redis::get('STRING_SINGLETOKEN_MAJOR_'. $username); // 重新获取加密参数加密 $ip = $request->getClientIp(); $secret = md5($ip . $username . $redisTime.'onlykey'); if ($singletoken != $secret) { // 记录此次异常登录记录 // \DB::table('data_login_exception')->insert(['guid' => $userInfo->guid, 'ip' => $ip, 'addtime' => time()]); // 清除 session 数据 // abort('404','你可能来到了没有知识的荒漠'); // return redirect('/'.$prefix.'/auth/logout'); // $request->session()->invalidate(); $data = [ 'message' => '您的帐号在另一个地点登录..!', 'url' => '/'.$prefix.'/auth/clearsession', 'jumpTime' => 5, 'status' => 'error' ]; //显示模板及数据 return response()-> view('errors/Prompt',compact('data')); } return $next($request); } else { return redirect('/'.$prefix.'/auth/logout'); } } else { return redirect('/'.$prefix.'/auth/logout'); } }上記のミドルウェアでは、セッションに保存されているユーザーのデータを第一段階の判定として取得し、判定に合格したら第二段階の判定に入るということを行います。 Redis に保存されているタイムスタンプを取得し、セキュリティ シーケンスと IP、ユーザー名、時刻、onlykey、MD5 暗号化を取り出し、暗号化後、クライアントが取得したトークンと比較します。エラー/プロンプトは、プロンプト スタイルなので、ここをクリックしてダウンロードする必要があります。Clearsession() メソッド
public function clearsession(Request $request){ $prefix=config('admin.route.prefix'); return redirect('/'.$prefix.'/auth/logout'); }ルーティング グループロジックの作成が完了しました。最後のステップは、すべての要素を制御することです。ログイン後のユーザーの操作のステップです。ここではルーティング グループが必要です。Modify config/admin .php
'middleware' => ['web', 'admin','SsoMiddleware'],上記は、1 つの Wi-Fi を使用して複数のデバイスにログインするために使用できます。別のネットワークで後者のデバイスにログインすると、前者のデバイスが上書きされます
これで完了です。 ! !
[関連する推奨事項:
laravel ビデオチュートリアル]
以上がlaravel-adminを例として、Laravelのシングルユーザーログインについて詳しく説明します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。