laravel의 Auth 클래스에 대해 질문이 있나요?

WBOY
풀어 주다: 2016-08-04 09:20:17
원래의
1056명이 탐색했습니다.

인증을 사용하세요.

<code>use Illuminate\Routing\Controller;

class AuthController extends Controller {

    /**
     * Handle an authentication attempt.
     *
     * @return Response
     */
    public function authenticate()
    {
        if (Auth::attempt(['email' => $email, 'password' => $password]))
        {
            return redirect()->intended('dashboard');
        }
    }

}
</p>
<p>이 인증 외관은 어떻게 확인되나요? 데이터베이스 쿼리도 없고 살펴볼 특정 코드도 없습니다. . </p>

                            
                        


                                                                                                                        
                     <h2>답글 내용: </h2>
                      
                                                            
<p><?php 네임스페이스 AppHttpControllers;</p>
<p>인증을 사용하세요.</p>
<pre class="brush:php;toolbar:false"><code>use Illuminate\Routing\Controller;

class AuthController extends Controller {

    /**
     * Handle an authentication attempt.
     *
     * @return Response
     */
    public function authenticate()
    {
        if (Auth::attempt(['email' => $email, 'password' => $password]))
        {
            return redirect()->intended('dashboard');
        }
    }

}
</p>
<p>이 인증 외관은 어떻게 확인되나요? 데이터베이스 쿼리도 없고 살펴볼 특정 코드도 없습니다. . </p>

                            
                        
            <p class="answer fmt" data-id="1020000006071581">
                                    
</p>
<p>Auth 클래스는 원래 <code>class_alias</code>였던 <code>IlluminateSupportFacadesAuth</code> 함수의 이름을 변경하여 얻습니다. </p>
<blockquote><p><strong>별로 고무적이지 않습니다</strong> @granton laravel ide 도우미를 통해 보는 방식은 학습에 도움이 되지 않습니다(<strong> 물론 이것은 기술이지만, 처음 접하는 사람들에게는 적합하지 않습니다. 프로젝트 개발에서 소스를 빠르게 찾는데 적합한 학습입니다</strong>. 왜냐하면 그게 제가 하는 일이거든요). </p></blockquote>
<p>계속해서 전체 프레임워크에서 유사한 문제를 정말로 이해하고 싶다면 프레임워크를 따라가기만 하면 빠르게 배울 수 있을 뿐만 아니라 새로운 대륙도 발견할 수 있습니다. 여기서는 문제에 대한 문서에 언급된 부분인 서비스 제공자, 서비스 컨테이너, 외관 패턴만 언급하겠습니다. </p>
<p>Facade는 Facade 모드를 말하며 처음에 Auth의 소스를 언급했는데, 소스 코드를 보면 실제로 작동하는 줄이 하나 있습니다. , 실제로는 텍스트 문자열을 반환하는 메서드입니다. 문서에서 <code>服务提供者</code>에 대한 부분을 읽어보시기 바랍니다. 서비스 공급자를 사용하여 <code>服务容器</code>에 AuthManager 공급자를 등록하면 Facade는 해당 문자열을 사용합니다. 자동 구문 분석은 AuthManager 인스턴스를 생성합니다(엄밀히 말하면 AuthManager는 싱글톤이며 등록된 공급자를 통해 확인할 수 있습니다). AuthManager는 구성에 따라 드라이버를 자동으로 선택하는 것을 포함하여 Auth Facade의 모든 기능을 제공하며 드라이버는 시도, 로그인 및 확인과 같은 방법을 제공합니다. </p>
<p><strong><em>모든 기능, 특히 laravel 자체 구성 요소에 대한 문서를 주의 깊게 읽어보면 해당 기능이 확장 기능을 지원한다는 것을 알 수 있으며 확장 방법은 프레임워크의 핵심인 서비스 컨테이너를 사용하는 것입니다. . 언급한 방법을 확장하고 암호화 방법을 변경하는 것은 매우 간단합니다. </em></strong></p>
<p>더 많은 문서를 읽어보세요. </p>
<h3><strong><em>2016-07-27 보충: </em></strong></h3>
<p>이 프레임워크의 작동 메커니즘을 이해하면 실제로는 복잡하지 않습니다. (별로 중요하지 않은 세부 사항은 무시하고 소스 코드를 읽으면 됩니다.) 자세한 내용은): </p>
<ol>
<li><p><code>IlluminateFoundationApplication</code> 인스턴스 생성 </p></li>
<li>
<p> (웹 애플리케이션용) Http 코어 인스턴스 생성 <code>AppHttpKernel</code> ---> <code>IlluminateFoundationHttpKernel</code>, <em> 화살표는 상속 관계를 나타냅니다 </em></p>
</li>
<li>
<p><strong> 내에서 서비스 제공자를 등록하고 등록 동작을 수행합니다. </strong>에 인증 구성 요소(<code>IlluminateAuthAuthManager</code>)가 등록되면 후속 작업이 수행됩니다. ; <code>IlluminateAuthAuthServiceProvider</code></p>
</li>
<li> 미들웨어 로딩, 경로 분배, 응답 처리 등의 후속 서비스가 시작되고 프로세스가 완료됩니다. <p></p>
</li>
</ol>위 과정에서 언급한 <p>이 있는데, <code>服务提供者(Service Provider)</code>이 프로젝트 구성<code>IlluminateAuthAuthServiceProvider</code>에 등록되어 있는 것을 볼 수 있는데, 그 안에 <code>config/app.php</code>이라는 중요한 문단이 있습니다.
</p>
<pre class="brush:php;toolbar:false"><code>protected function registerAuthenticator()
{
    $this->app->singleton('auth', function ($app) {
        $app['auth.loaded'] = true;
        return new AuthManager($app);
    });

    $this->app->singleton('auth.driver', function ($app) {
        return $app['auth']->guard();
    });
}</code>
로그인 후 복사

클래스를 통해 접근하는 모든 메소드 함수가 auth 객체인 IlluminateAuthAuthManager이라는 싱글턴이 등록되어 있는 것을 볼 수 있으며, Auth 클래스는 Auth 객체. 🎜> 이름이 변경된 클래스는 실제로 class_alias에 액세스하는 것과 같습니다. Auth은 Facade의 상속이며 소스 코드 보기: IlluminateSupportFacadesAuth IlluminateSupportFacadesAuth

<code>class Auth extends Facade
{
    /**
     * Get the registered name of the component.
     *
     * @return string
     */
    protected static function getFacadeAccessor()
    {
        return 'auth';
    }
}</code>
로그인 후 복사
에 주의하세요. 아니요, 이 반환 값은

에 등록된 값입니다. Facade 클래스가 가리키는 객체에 대한 메서드를 가질 수 있는 이유는 무엇입니까? 실제로 return 'auth';의 소스코드를 보면 알 수 있는 매직메소드 Service Provider를 사용하고 있다. 문서에도 이에 대해 언급되어 있습니다. __callStatic

至于你们去查看 AuthManager 并没发现一些可被执行的方法,实际上是因为 AuthManager 下还有一系列驱动(Driver),这些驱动使得 Auth 组件高度可定制化,文档上对这块做了着重讲解,驱动由两类构成,分别是实现了 Illuminate\Contracts\Auth\UserProvider 接口和 Illuminate\Contracts\Auth\Authenticatable 接口的类的实例,后者是用于提供认证组件获取认证对象信息的接口,比如获取账户、密码的方法,前者则是你们关注的,尤其是 retrieveByCredentialsvalidateCredentials 这两个接口方法,retrieveByCredentials 用于根据 attempt 传入的凭据获取用户实例的,validateCredentials 适用于验证凭据是否有效(想改变密码验证方式的就是通过该处实现)。

关于如何扩展、定制 Auth 组件,文档有说明,so~~~多读文档,这种问题读了文档,自然解决。不是简单看就完了,做到我说到任何一点你都知道在文档哪里去找,才说明你真的是读了文档的。我上面所提的所有,文档都写了。。。

以上。

如果使用 ide-helper, 可以在 _ide_helper.php 中看到这段代码

<code class="php">class Auth extends \Illuminate\Support\Facades\Auth{
    // ...
}</code>
로그인 후 복사

其中

<code class="php">/**
 * Attempt to authenticate a user using the given credentials.
 *
 * @param array $credentials
 * @param bool $remember
 * @param bool $login
 * @return bool 
 * @static 
 */
public static function attempt($credentials = array(), $remember = false, $login = true){
    return \Illuminate\Auth\SessionGuard::attempt($credentials, $remember, $login);
}</code>
로그인 후 복사

也就是说,这个 attempt 方法调用的是 \Illuminate\Auth\SessionGuard::attempt($credentials, $remember, $login) 方法。

具体的登陆验证的逻辑在里面。

config里的auth.php里配置了数据模型的吧,指定了model进行数据查询和匹配

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿