laravelのAuthクラスについて質問がありますか?

WBOY
リリース: 2016-08-04 09:20:17
オリジナル
1057 人が閲覧しました

認証を使用する;

リーリー

この認証ファサードはどのように検証されますか?データベース クエリや確認する特定のコードはありません。 。

返信内容:

認証を使用する;

リーリー

この認証ファサードはどのように検証されますか?データベース クエリや確認する特定のコードはありません。 。

Auth クラスが渡されました class_alias 函数重命名获得的,原本是 IlluminateSupportFacadesAuth

あまりお勧めしません @granton laravel ide ヘルパーを介して表示する方法は学習に役立ちません (もちろん、これはテクニックですが、学習中の初心者には適していませんが、すぐに場所を見つけるのには適しています)プロジェクト開発のソース、それが私の仕事だからです)。

引き続き、フレームワーク全体で同様の問題を本当に理解したい場合は、フレームワークに従ってください。すぐに学べるだけでなく、いくつかの新しい大陸も発見できます。ここでは、問題のドキュメントで言及されている部分 (サービス プロバイダー、サービス コンテナー、ファサード パターン) についてのみ言及します。

ファサードとは、冒頭で Auth のソースについて触れましたが、実際に動作するのは 1 行だけです。実際にはテキスト文字列を返すメソッドです。 服务提供者 的部分,那个地方是构建框架功能的核心,利用服务提供者在 服务容器 AuthManager プロバイダーの登録に関するドキュメントを読むことをお勧めします。Facade を呼び出すと、Facade はそのメソッドによって返された文字列に基づいて AuthManager インスタンスを自動的に解析し、生成します (厳密に言えば、AuthManager はシングルトンであり、その登録されたプロバイダーを介してチェックできます)。 。 AuthManager は、(構成に従って) ドライバーの自動選択を含む、Auth ファサードのすべての機能を提供し、ドライバーは試行、ログイン、チェックなどのメソッドを提供します。

関数、特にlaravel独自のコンポーネントのドキュメントを注意深く読むと、それらが拡張機能をサポートしており、拡張の方法はフレームワークの核となるサービスコンテナを使用することであることがわかります。先ほど述べた方法を拡張して暗号化方法を変更するのは非常に簡単です。

さらに詳しいドキュメントをお読みください。

2016-07-27 補足:

このフレームワークの動作原理さえ理解していれば、実際にはそれほど複雑ではありません(あまり重要ではない詳細は無視して、詳細についてはソースコードを読んでください。) ):

  1. IlluminateFoundationApplication インスタンスを作成します。

  2. (Web アプリケーションの場合) Http コア インスタンスを作成します
  3. 矢印は継承関係を示します AppHttpKernel ---> IlluminateFoundationHttpKernel;

    サービスプロバイダーを登録し、
  4. 内で登録動作を実行します。 登録が完了すると、次の操作が実行されます。

    ミドルウェアのロード、ルート配布、応答処理などの後続のサービスが開始され、処理が完了します。 IlluminateAuthAuthManager)就是在IlluminateAuthAuthServiceProvider

  5. 上記のプロセスでは、
  6. の登録について説明しましたが、それには重要なポイントがあります:

    リーリー

    という名前の登録済みファイルが Facade の継承であり、ソース コードを表示する:
  7. メソッドを提供していることがわかります。 リーリー 次のことに注意してください。

    ソースコードを理解してください。ドキュメントにもそれについて言及されています。 服务提供者(Service Provider),就是 IlluminateAuthAuthServiceProvider,可以看到在项目配置 config/app.php

    至于你们去查看 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 までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート