Heim > PHP-Framework > Laravel > Hauptteil

Eine kurze Analyse der Prinzipien von Laravel Auth

藏色散人
Freigeben: 2020-08-07 16:01:02
nach vorne
4177 Leute haben es durchsucht

Das Folgende ist eine kurze Analyse der Prinzipien von Laravel Auth aus der Laravel Tutorial-Kolumne. Ich hoffe, dass es für Freunde in Not hilfreich sein wird!

Eine kurze Analyse der Prinzipien von Laravel Auth

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.

Eine kurze Analyse der Prinzipien von Laravel Auth

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
Nach dem Login kopieren

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();
    }
Nach dem Login kopieren

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;
Nach dem Login kopieren

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");
    }
Nach dem Login kopieren

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',
        // ],
    ],
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:zhihu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage