認証を使用する;
リーリーこの認証ファサードはどのように検証されますか?データベース クエリや確認する特定のコードはありません。 。
認証を使用する;
リーリーこの認証ファサードはどのように検証されますか?データベース クエリや確認する特定のコードはありません。 。
Auth クラスが渡されました class_alias
函数重命名获得的,原本是 IlluminateSupportFacadesAuth
。
あまりお勧めしません @granton laravel ide ヘルパーを介して表示する方法は学習に役立ちません (もちろん、これはテクニックですが、学習中の初心者には適していませんが、すぐに場所を見つけるのには適しています)プロジェクト開発のソース、それが私の仕事だからです)。
引き続き、フレームワーク全体で同様の問題を本当に理解したい場合は、フレームワークに従ってください。すぐに学べるだけでなく、いくつかの新しい大陸も発見できます。ここでは、問題のドキュメントで言及されている部分 (サービス プロバイダー、サービス コンテナー、ファサード パターン) についてのみ言及します。
ファサードとは、冒頭で Auth のソースについて触れましたが、実際に動作するのは 1 行だけです。実際にはテキスト文字列を返すメソッドです。 服务提供者
的部分,那个地方是构建框架功能的核心,利用服务提供者在 服务容器
AuthManager プロバイダーの登録に関するドキュメントを読むことをお勧めします。Facade を呼び出すと、Facade はそのメソッドによって返された文字列に基づいて AuthManager インスタンスを自動的に解析し、生成します (厳密に言えば、AuthManager はシングルトンであり、その登録されたプロバイダーを介してチェックできます)。 。 AuthManager は、(構成に従って) ドライバーの自動選択を含む、Auth ファサードのすべての機能を提供し、ドライバーは試行、ログイン、チェックなどのメソッドを提供します。
関数、特にlaravel独自のコンポーネントのドキュメントを注意深く読むと、それらが拡張機能をサポートしており、拡張の方法はフレームワークの核となるサービスコンテナを使用することであることがわかります。先ほど述べた方法を拡張して暗号化方法を変更するのは非常に簡単です。
さらに詳しいドキュメントをお読みください。
このフレームワークの動作原理さえ理解していれば、実際にはそれほど複雑ではありません(あまり重要ではない詳細は無視して、詳細についてはソースコードを読んでください。) ):
IlluminateFoundationApplication
インスタンスを作成します。
矢印は継承関係を示します AppHttpKernel
---> IlluminateFoundationHttpKernel
;
ミドルウェアのロード、ルート配布、応答処理などの後続のサービスが開始され、処理が完了します。 IlluminateAuthAuthManager
)就是在IlluminateAuthAuthServiceProvider
リーリー
という名前の登録済みファイルが Facade の継承であり、ソース コードを表示する: ソースコードを理解してください。ドキュメントにもそれについて言及されています。 服务提供者(Service Provider)
,就是 IlluminateAuthAuthServiceProvider
,可以看到在项目配置 config/app.php
至于你们去查看 AuthManager
并没发现一些可被执行的方法,实际上是因为 AuthManager
下还有一系列驱动(Driver),这些驱动使得 Auth 组件高度可定制化,文档上对这块做了着重讲解,驱动由两类构成,分别是实现了 Illuminate\Contracts\Auth\UserProvider
接口和 Illuminate\Contracts\Auth\Authenticatable
接口的类的实例,后者是用于提供认证组件获取认证对象信息的接口,比如获取账户、密码的方法,前者则是你们关注的,尤其是 retrieveByCredentials
和 validateCredentials
这两个接口方法,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进行数据查询和匹配