>  기사  >  백엔드 개발  >  Laravel의 시도 방법을 재정의하는 방법은 무엇입니까? 암호화 방법이 사용자 정의되어 있기 때문입니다.

Laravel의 시도 방법을 재정의하는 방법은 무엇입니까? 암호화 방법이 사용자 정의되어 있기 때문입니다.

WBOY
WBOY원래의
2016-08-04 09:20:171777검색

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

이것의 비밀번호는 본인이 정의한 방법으로 암호화됩니다

답글 내용:

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

이것의 비밀번호는 본인이 정의한 방법으로 암호화됩니다

문서는 실제로 작성되지 않았지만 소스코드를 보면 알 수 있습니다

Auth 메소드 구현은 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>

기본값은 eloquent를 인증 드라이버로 사용하는 것이므로 내부 구현을 살펴보세요IlluminateAuthEloquentUserProvider

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

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

따라서 확인 논리를 변경하려면 원래 드라이버를 상속한 다음 verifyCredentials에서 논리를 다시 작성하면 됩니다.

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

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

마지막으로 드라이버를 설정합니다. AppServiceProvider의 boot()를 로드하는 것이 좋습니다

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

문서에 적혀있어요! 너무 게으르지 말고 문서를 읽어보세요. 최근에 질문하신 내용이 모두 문서에 적혀 있습니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.