Laravel 5.2 以降、組み込みの Auth 認証システムは複数のロール認証をサポートできます。つまり、管理者と一般ユーザーの 2 つの役割がある場合、同じ認証システムを通じて認証を実現できます。
この記事では、Laravel のマルチユーザー認証システムの関連コンテンツを詳細に紹介し、参考と学習のために共有します。以下では多くを説明しません。詳細な紹介を見てみましょう。
#1 コードを自動的に生成します
Laravel 独自の Auth は、1 行のコマンドで関連する認証コントローラー、テンプレート、ルートを生成できます:
php artisan make:auth
これにより、AuthController 認証コントロール HomeController および HomeController universal が生成されますコントローラー、このコントローラーは役に立ちません。ログインに成功した後にジャンプするだけです。ログインと登録に必要なテンプレート ファイルもいくつかあります。リソース/ビューを参照すると、関連する認証ルートも生成されます。ソース コードは IlluminateRoutingRouter::auth();
にあり、実際にいくつかのログインおよび登録関数を構成します: IlluminateRoutingRouter::auth();
,其实就是配置了一些登录注册用的:
public function auth() { // Authentication Routes... $this->get('login', 'Auth\AuthController@showLoginForm'); $this->post('login', 'Auth\AuthController@login'); $this->get('logout', 'Auth\AuthController@logout'); // Registration Routes... $this->get('register', 'Auth\AuthController@showRegistrationForm'); $this->post('register', 'Auth\AuthController@register'); // Password Reset Routes... $this->get('password/reset/{token?}', 'Auth\PasswordController@showResetForm'); $this->post('password/email', 'Auth\PasswordController@sendResetLinkEmail'); $this->post('password/reset', 'Auth\PasswordController@reset'); }
#2 auth.php文件配置
这个是和认证相关的配置文件,估计很多人看不懂里面一些概念,比如说guard以及provider
这些,文档也基本上是没写。那么guard到底是什么东西呢?这个可以理解为就是一个角色,在guards
数组中的每一项都是一个角色,默认的有web和api两种,这就表示了当前有这两种角色会使用到认证系统。当然,这两种肯定是不会满足我们要求的,所以我们一般都会自定义一些guard。自定义也很简单,就是在guards数组增加一项,其中driver就是表示这个认证要怎么去保存用户状态,一般是保存在session中,而provider就是下面provider数组的一项,那么provider又是什么鬼呢?这个更好理解了,你要实现用户认证肯定要保存用户名密码对吧,那么provider就是告诉Laravel你的用户信息保存在哪一张表里面,driver就是告诉了要使用那种方式来操作数据库。
#3 认证
其实Laravel自动生成的代码已经可以满足登录注册的需求了,但是每一个guard都需要一个AuthController来,那么如何公用一个认证控制器呢?这里就是用到guard这个东西了,因为可以表示用户身份来进行不同的逻辑。但是,在认证控制器中无法获取到这guard,所以我们可以通过路由参数的方式来实现。定义一个路由群组:
Route::group(['prefix'=>'{guard}'],function(){ Route::auth();});
在这个路由群组中我们设置前缀为guard参数,这样就可以在AuthController中获取到当前的guard了。一般情况下我们获取路由参数都是通过依赖注入Request实例来获取,但是这里也有一个坑那就是我在5.1版本之前路由参数都可以通过
$request->input('key')
这样来获取,但是在5.2中已经不行了,必须通过
$request->key
来获取,或者就是直接从路由实例中获取,不知道这是什么原因。在AuthController控制器中使用了一些trait,这些trait就是实现了认证注册的逻辑,可以通过重写一些控制器的属性来自定义逻辑。包括$redirectTo
还有$guard
以及$username
Route::get('profile', [ 'middleware' => 'auth:api', 'uses' => 'ProfileController@show']);
#2 auth.php ファイル構成
などのいくつかの概念を理解していない人が多いと推測され、ドキュメントは基本的に書かれていません。では、ガードとは一体何なのでしょうか?これは、guards 配列内の各項目がロールであると理解できます。デフォルトのものは web と API であり、現在これら 2 つのロールが認証システムを使用することを意味します。もちろん、これら 2 つは絶対に要件を満たさないため、通常はいくつかのガードをカスタマイズします。カスタマイズも非常に簡単です。ガード配列に項目を追加するだけです。ドライバーは、この認証のユーザー ステータスを通常セッション内で保存する方法を示します。プロバイダーは以下のプロバイダー配列内の項目です。プロバイダー?これは理解しやすいです。ユーザー認証を実装したい場合は、ユーザー名とパスワードを保存する必要があります。その後、プロバイダーはユーザー情報がどのテーブルに保存されているかを Laravel に伝え、ドライバーは Laravel を操作するためにどのメソッドを使用するかを伝えます。データベース。
#3 認証
実際、Laravel によって自動的に生成されたコードはすでにログインと登録のニーズを満たすことができますが、各ガードには AuthController が必要なので、認証コントローラーを共有するにはどうすればよいでしょうか?ここでガードが使用されているのは、さまざまなロジックを実行するためにユーザーの ID を表すことができるためです。ただし、このガードは認証コントローラーでは取得できないため、ルーティング パラメーターを通じて実現できます。ルーティング グループを定義します:
$user = Auth::user();
このルーティング グループでは、現在のガードを AuthController で取得できるように、ガード パラメーターにプレフィックスを設定します。通常の状況では、Request インスタンスへの依存関係注入を通じてルーティング パラメーターを取得しますが、ここにも落とし穴があります。バージョン 5.1 より前では、ルーティング パラメーターは
$user = Auth::guard('guard')->user();🎜 を通じて取得できましたが、5.2 では No になりました。 、🎜🎜🎜🎜🎜rrreee🎜を通じて取得するか、ルーティングインスタンスから直接取得する必要があります。その理由はわかりません。いくつかのトレイトは AuthController コントローラで使用されます。これらのトレイトは、コントローラの一部のプロパティを書き換えることで、ロジックをカスタマイズできます。
$redirectTo
、$guard
、$username
などが含まれます。一目で、最初のものがログイン成功後にジャンプするものであることがわかります。 2 番目は現在使用されているガードを定義するもので、3 番目は認証に使用されるユーザー名フィールドです。したがって、認証コントローラーでガードを取得することでカスタマイズできます。 🎜🎜🎜🎜🎜#4 ルート保護🎜🎜🎜🎜🎜 一般に、認証システムを作る人はルートを保護しなければなりません。では、どうやってルートを保護するのでしょうか?ドキュメントには、保護する必要があるルートに認証ミドルウェアを追加するように記載されていますが、実際はどうですか?これは確かに当てはまりますが、この文書には、認証ミドルウェアによって保護されたルートは Web ミドルウェアでも追加する必要がある、Web ミドルウェアでも追加する必要がある、Web ミドルウェアでも追加する必要がある、ということが重要であるとは記載されていません。物事を3回言うと、どんな問題が起きるでしょうか?認証が成功しても失敗しても、/ ルートにジャンプします。この大きな落とし穴に注意してください。もちろん、ミドルウェアでガードを指定して、どのガードを介して認証するかを Laravel に知らせることもできます。指定されていない場合は、設定ファイル内のデフォルトのガードが使用されます: 🎜🎜🎜🎜🎜rrreee🎜🎜🎜#5 ユーザー インスタンスの取得 🎜 🎜🎜🎜🎜 認証に合格した後、Auth ファサードを通じて現在認証されているユーザー インスタンスを取得できます。 🎜🎜🎜🎜🎜rrreee🎜 ここでもう 1 つ注意すべき点は、上記のメソッドはデフォルトで設定ファイルにガードを取得することです。現在ログインしているガードが設定ファイルにない場合は、次のように取得する必要があります。 🎜🎜🎜🎜$user = Auth::guard('guard')->user();
#6 总结
总得来说,Laravel5.2自带的Auth系统还是很好用的,只是有一些小坑文档没说清楚,用过几次之后就可以很熟悉了,可以给我们节约很多的开发时间。
相关推荐:
以上がLaravelのマルチユーザー認証システムの紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

PHPSESSIONの障害の理由には、構成エラー、Cookieの問題、セッションの有効期限が含まれます。 1。構成エラー:正しいセッションをチェックして設定します。save_path。 2.Cookieの問題:Cookieが正しく設定されていることを確認してください。 3.セッションの有効期限:セッションを調整してください。GC_MAXLIFETIME値はセッション時間を延長します。

PHPでセッションの問題をデバッグする方法は次のとおりです。1。セッションが正しく開始されるかどうかを確認します。 2.セッションIDの配信を確認します。 3.セッションデータのストレージと読み取りを確認します。 4.サーバーの構成を確認します。セッションIDとデータを出力し、セッションファイルのコンテンツを表示するなど、セッション関連の問題を効果的に診断して解決できます。

session_start()への複数の呼び出しにより、警告メッセージと可能なデータ上書きが行われます。 1)PHPは警告を発し、セッションが開始されたことを促します。 2)セッションデータの予期しない上書きを引き起こす可能性があります。 3)session_status()を使用してセッションステータスを確認して、繰り返しの呼び出しを避けます。

PHPでのセッションライフサイクルの構成は、session.gc_maxlifetimeとsession.cookie_lifetimeを設定することで達成できます。 1)session.gc_maxlifetimeサーバー側のセッションデータのサバイバル時間を制御します。 0に設定すると、ブラウザが閉じているとCookieが期限切れになります。

データベースストレージセッションを使用することの主な利点には、持続性、スケーラビリティ、セキュリティが含まれます。 1。永続性:サーバーが再起動しても、セッションデータは変更されないままになります。 2。スケーラビリティ:分散システムに適用され、セッションデータが複数のサーバー間で同期されるようにします。 3。セキュリティ:データベースは、機密情報を保護するための暗号化されたストレージを提供します。

PHPでのカスタムセッション処理の実装は、SessionHandlerInterfaceインターフェイスを実装することで実行できます。具体的な手順には、次のものが含まれます。1)CussentsessionHandlerなどのSessionHandlerInterfaceを実装するクラスの作成。 2)セッションデータのライフサイクルとストレージ方法を定義するためのインターフェイス(オープン、クローズ、読み取り、書き込み、破壊、GCなど)の書き換え方法。 3)PHPスクリプトでカスタムセッションプロセッサを登録し、セッションを開始します。これにより、データをMySQLやRedisなどのメディアに保存して、パフォーマンス、セキュリティ、スケーラビリティを改善できます。

SessionIDは、ユーザーセッションのステータスを追跡するためにWebアプリケーションで使用されるメカニズムです。 1.ユーザーとサーバー間の複数のインタラクション中にユーザーのID情報を維持するために使用されるランダムに生成された文字列です。 2。サーバーは、ユーザーの複数のリクエストでこれらの要求を識別および関連付けるのに役立つCookieまたはURLパラメーターを介してクライアントに生成および送信します。 3.生成は通常、ランダムアルゴリズムを使用して、一意性と予測不可能性を確保します。 4.実際の開発では、Redisなどのメモリ内データベースを使用してセッションデータを保存してパフォーマンスとセキュリティを改善できます。

APIなどのステートレス環境でのセッションの管理は、JWTまたはCookieを使用して達成できます。 1。JWTは、無国籍とスケーラビリティに適していますが、ビッグデータに関してはサイズが大きいです。 2.cookiesはより伝統的で実装が簡単ですが、セキュリティを確保するために慎重に構成する必要があります。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

メモ帳++7.3.1
使いやすく無料のコードエディター

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

ホットトピック









