Dieser Artikel vermittelt Ihnen relevantes Wissen über Laravel, das hauptsächlich Probleme im Zusammenhang mit der Einzelbenutzeranmeldung vorstellt. Schauen wir uns den relevanten Inhalt der Einzelbenutzeranmeldung am Beispiel von Laravel-Admin an . .
【Verwandte Empfehlung: Laravel-Video-Tutorial】
Jeder hat schon einmal von dem Begriff Einzelbenutzer-Anmeldung gehört. Warum benötigen Sie eine Einzelbenutzer-Anmeldung? Zum Beispiel: Video-Website, wenn ein Konto mit VIP aufgeladen wird , und dann können Sie Wenn Ihr Konto mit anderen Personen geteilt wird, haben auch andere Personen VIP-Privilegien und die Interessen des Unternehmens werden geschädigt. Wenn das Konto mit 1.000 oder 10.000 Personen geteilt wird, ist der Verlust erheblich. Deshalb werde ich Sie heute dazu bringen, eine Benutzeranmeldung aufzugeben .
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); }
createtoken()-Methode hinzufügen
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()); }
Zuerst nach erfolgreicher Anmeldung den aktuellen Zeitstempel abrufen und den Benutzer über IP und Zeit abfragen Benutzername und die einzige Anti-Diebstahl-Zeichenfolge „onlykey“, „onlykey“ kann ein beliebiges Zeichen sein, MD5-Verschlüsselung durchführen und TOKEN erhalten. Dann speichern wir den soeben erhaltenen Zeitstempel und das Token in Redis. Der Redis-Schlüssel wird mit dem Benutzernamen an die Zeichenfolge angehängt, um die TOKEN-Überprüfung der späteren Middleware zu erleichtern. Anschließend speichern wir die Benutzerinformationen in der Sitzung.
Middleware erstellen
Mitte Um es einfach auszudrücken: Beim Zugriff auf eine Methode wird der Inhalt der Middleware im Voraus überprüft. Nach der Überprüfung können Sie auf die Methode zugreifen, auf die zugegriffen werden soll.
Befehl zum Erstellen von Middleware
// 项目根目录运行 php artisan make:middleware SsoMiddleware
protected $routeMiddleware = [] hinzu und fügen Sie Folgendes hinzu'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'); } }
Was die obige Middleware tut, ist: die in der Sitzung gespeicherten Benutzerdaten als erste Beurteilungsebene abzurufen Nachdem Sie das Urteil gefällt haben, betreten Sie die zweite Beurteilungsebene und holen Sie sich zuerst das Token und den in Redis gespeicherten Zeitstempel. Nehmen Sie die Sicherheitssequenz heraus und verschlüsseln Sie IP, Benutzername, Zeit, Onlykey und MD5. Vergleichen Sie sie nach der Verschlüsselung mit dem erhaltenen Token vom Client.
Die Fehler/Eingabeaufforderung ist ein Eingabeaufforderungsstil und Sie müssen hier klicken, um die Methode „clearsession()“ zu löschen
public function clearsession(Request $request){ $prefix=config('admin.route.prefix'); return redirect('/'.$prefix.'/auth/logout'); }
Routinggruppe
Wir haben die Logik fertig geschrieben Bei jedem Schritt des Anmeldevorgangs des Benutzers benötigen wir die Routing-Gruppe
Du bist fertig! ! ! 【Verwandte Empfehlung:Laravel-Video-Tutorial
】Das obige ist der detaillierte Inhalt vonNehmen Sie Laravel-Admin als Beispiel, um die Laravel-Einzelbenutzeranmeldung im Detail zu erläutern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!