この記事では、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); }
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); }
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()); }
// 项目根目录运行 php artisan make:middleware SsoMiddleware
'SsoMiddleware' => \App\Http\Middleware\SsoMiddleware::class,
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'); } }
public function clearsession(Request $request){ $prefix=config('admin.route.prefix'); return redirect('/'.$prefix.'/auth/logout'); }
'middleware' => ['web', 'admin','SsoMiddleware'],
これで完了です。 ! !
[関連する推奨事項:
laravel ビデオチュートリアル]
以上がlaravel-adminを例として、Laravelのシングルユーザーログインについて詳しく説明します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。