Heim  >  Artikel  >  Backend-Entwicklung  >  Wie überschreibe ich die Versuchsmethode von Laravel? Weil die Verschlüsselungsmethode angepasst ist.

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

WBOY
WBOYOriginal
2016-08-04 09:20:171779Durchsuche

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

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>

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>

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>

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>

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

<code>Auth::setProvider(new TestUserProvider());</code>

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.

Stellungnahme:
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