Wie überschreibe ich die Versuchsmethode von Laravel? Weil die Verschlüsselungsmethode angepasst ist.

WBOY
Freigeben: 2016-08-04 09:20:17
Original
1777 Leute haben es durchsucht

<code>Auth::attempt(array('username' => $username, 'password' => $password),false)
</code>
Nach dem Login kopieren
Nach dem Login kopieren

Das Passwort in diesem Ding muss mit einer von Ihnen definierten Methode verschlüsselt werden

Antwortinhalt:

<code>Auth::attempt(array('username' => $username, 'password' => $password),false)
</code>
Nach dem Login kopieren
Nach dem Login kopieren

Das Passwort in diesem Ding muss mit einer von Ihnen definierten Methode verschlüsselt werden

Das Dokument ist zwar noch nicht geschrieben, aber wir können uns den Quellcode ansehen

Die Implementierung der Auth-Methode befindet sich in IlluminateAuthGuard

<code>    /**
     * Attempt to authenticate a user using the given credentials.
     *
     * @param  array  $credentials
     * @param  bool   $remember
     * @param  bool   $login
     * @return bool
     */
    public function attempt(array $credentials = [], $remember = false, $login = true)
    {
        $this->fireAttemptEvent($credentials, $remember, $login);

        $this->lastAttempted = $user = $this->provider->retrieveByCredentials($credentials);            
        
        // 看这里
        // If an implementation of UserInterface was returned, we'll ask the provider
        // to validate the user against the given credentials, and if they are in
        // fact valid we'll log the users into the application and return true.
        if ($this->hasValidCredentials($user, $credentials)) {
            if ($login) {
                $this->login($user, $remember);
            }

            return true;
        }

        return false;
    }
    
    /**
     * Determine if the user matches the credentials.
     *
     * @param  mixed  $user
     * @param  array  $credentials
     * @return bool
     */
    protected function hasValidCredentials($user, $credentials)
    {
        // 执行认证驱动器的validCredentials方法
        return ! is_null($user) && $this->provider->validateCredentials($user, $credentials);
    }</code>
Nach dem Login kopieren

Standardmäßig wird eloquent als Authentifizierungstreiber verwendet. Schauen Sie sich also die Implementierung im Inneren an IlluminateAuthEloquentUserProvider

<code>    public function validateCredentials(UserContract $user, array $credentials)
    {
        $plain = $credentials['password'];

        return $this->hasher->check($plain, $user->getAuthPassword());
    }</code>
Nach dem Login kopieren

Wenn Sie also die Verifizierungslogik ändern möchten, können Sie den ursprünglichen Treiber erben und dann die Logik in „validateCredentials“ neu schreiben

<code>class TestUserProvider extend EloquentUserProvider
{
    public function validateCredentials(UserContract $user, array $credentials)
    {
        $plain = $credentials['password'];

        return md5($plain) == $user->getAuthPassword();
    }
}</code>
Nach dem Login kopieren

Stellen Sie abschließend den Treiber ein. Es wird empfohlen, boot() von AppServiceProvider zu laden

<code>Auth::setProvider(new TestUserProvider());</code>
Nach dem Login kopieren

Es steht im Dokument! Seien Sie nicht zu faul, die Dokumentation zu lesen. Die Fragen, die Sie kürzlich gestellt haben, stehen alle in der Dokumentation.

Verwandte Etiketten:
Quelle:php.cn
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