Das Folgende ist eine kurze Analyse der Prinzipien von Laravel Auth aus derLaravelTutorial-Kolumne. Ich hoffe, dass es für Freunde in Not hilfreich sein wird!
Da das Unternehmen kürzlich Laravel-admin als Backend verwendet und dem Laravel-Framework ausgesetzt wurde, muss ich sagen, dass die Kraft und Ökologie der Laravel-Community tatsächlich ziemlich mächtig sind.
Aber das interne Geschäft des Unternehmens liegt ausschließlich auf der Java-Seite und das gesamte Backend passt JavaApi an, sodass die Funktionen von Laravel stark reduziert werden müssen. Erstens kann das Eloquent-Modell überhaupt nicht verwendet werden Hier und nur 3 Tabellen gespeichert, dies ist die Tabelle, die mit Laravel-admin geliefert wird.
Laravel-admin wird mit 9 Tabellen geliefert. Da das Benutzer-Login-Geschäft vollständig auf der API-Seite gespeichert ist, habe ich auf die integrierte Tabellenfunktion verzichtet. Daher müssen Sie die API-Anmeldelogik selbst implementieren und die Laravel Auth-Authentifizierung verwenden.
Prinzipielle Interpretation
// 使用下面这个命令Laravel会自动为我们生成Auth路由和认证模块。跟着代码往下解读。 php artisan make:auth // Http/Controllers/Auth/LoginController 使用了 AuthenticatesUsers
Unter diesen erklären die folgenden drei Methoden die gesamte Anmeldelogik.
public function login(Request $request) { $this->validateLogin($request); if ($this->hasTooManyLoginAttempts($request)) { $this->fireLockoutEvent($request); return $this->sendLockoutResponse($request); } // 这里尝试登录系统, if ($this->attemptLogin($request)) { return $this->sendLoginResponse($request); } $this->incrementLoginAttempts($request); return $this->sendFailedLoginResponse($request); } protected function attemptLogin(Request $request) { return $this->guard()->attempt( $this->credentials($request), $request->has('remember') ); } protected function guard() { return Auth::guard(); }
Der Controller sucht nach Auth::guard(), also was ist dieses Auth::guard()? Der Name lässt vermuten, dass es sich um ein Auth-Verwaltungsmodul handelt, das die Authentifizierungs-Factory-Modus-Schnittstelle Guards() implementiert. ), in der Standardkonfiguration, hat mir einen sessionGuard zurückgegeben.
Schauen Sie sich hauptsächlich die folgenden 4 Methoden an
Illuminate\Auth\AuthManager;
Im Allgemeinen ist der Benutzeranmeldevorgang abgeschlossen. Der einfache Vorgang ist
public function __construct($app) { $this->app = $app; $this->userResolver = function ($guard = null) { return $this->guard($guard)->user(); }; } // Auth::guard();就是调用了这个方法。 public function guard($name = null) { // 首先查找$name, 没有就使用默认的驱动, $name = $name ?: $this->getDefaultDriver(); // 意思就是要实例化出这个驱动并且返回, return isset($this->guards[$name]) ? $this->guards[$name] : $this->guards[$name] = $this->resolve($name); } // 默认的驱动是从配置文件里面读取的,/config/auth.php default配置项 public function getDefaultDriver() { return $this->app['config']['auth.defaults.guard']; } // 这里是构造Auth-guard驱动 protected function resolve($name) { $config = $this->getConfig($name); if (is_null($config)) { throw new InvalidArgumentException("xxx"); } // 这里是如果你自己实现的驱动就返回 if (isset($this->customCreators[$config['driver']])) { return $this->callCustomCreator($name, $config); } // 这里是系统默认两个类分别是 // session 和 token 这里主要讲 sessionGuard . $driverMethod = 'create'.ucfirst($config['driver']).'Driver'; if (method_exists($this, $driverMethod)) { return $this->{$driverMethod}($name, $config); } throw new InvalidArgumentException("xxx"); }
Implementieren Sie den Controller/die Methode, die nur sein kann Zugriff, nachdem sich der Benutzer angemeldet hat
// Auth::guard() ,不传参数,就调用默认的default.guard , 'defaults' => [ 'guard' => 'web', 'passwords' => 'users', ], // 系统的guard .默认支持 "database", "eloquent",意思就是说你的provider必须是这两个实例中的一个, 'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'token', 'provider' => 'users', ], ], // 这个就是上面的provider了,你使用哪一个provider作为你的Auth::guard()返回的 // 模型 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\User::class, ], // 'users' => [ // 'driver' => 'database', // 'table' => 'users', // ], ],
Das ist das erste Mal, dass ich schreibe, es ist ein Fehler aufgetreten. Bitte weisen Sie darauf hin und bedanken Sie sich!
Das obige ist der detaillierte Inhalt vonEine kurze Analyse der Prinzipien von Laravel Auth. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!