検索
ホームページバックエンド開発PHPチュートリアルLaravelはマルチユーザー認証システムを実装しています

今回はLaravelでマルチユーザー認証システムを実装するための注意事項を紹介します。実際のケースを見てみましょう。

はじめに

Laravel 5.2 以降、組み込みの Auth 認証システムは複数のロール認証をサポートできるようになりました。つまり、管理者と一般ユーザーの 2 つの役割がある場合、同じ認証システムを通じて認証を実現できます。

この記事では、Laravel のマルチユーザー認証システムの関連コンテンツを詳細に紹介し、参考と学習のために共有します。以下では多くを説明しません。詳細な紹介を見てみましょう。

#1 コードを自動的に生成します

Laravel 独自の Auth は、1 行のコマンドで関連する認証 controller、テンプレート、ルートを生成できます:

php artisan make:auth

これにより、AuthController 認証コントローラーと 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 ファイル設定

これと認証関連 設定ファイル🎜では、ガードやプロバイダーなど、その中の一部の概念を理解できない人が多いと推測されます
配列内の各項目がロールであると理解できます。デフォルトのものは Web と API であり、これらの 2 つのロールが現在認証システムを使用していることを意味します。もちろん、これら 2 つは絶対に要件を満たさないため、通常はいくつかのガードをカスタマイズします。カスタマイズも非常に簡単です。ガード配列に項目を追加するだけです。ドライバーは、この認証のユーザー ステータスを通常セッション内で保存する方法を示します。プロバイダーは以下のプロバイダー配列内の項目です。プロバイダー?これは理解しやすいです。ユーザー認証を実装したい場合は、ユーザー名とパスワードを保存する必要があります。その後、プロバイダーはユーザー情報がどのテーブルに保存されているかを Laravel に伝え、ドライバーは Laravel を操作するためにどのメソッドを使用するかを伝えます。データベース。 🎜🎜🎜🎜#3 認証🎜🎜🎜🎜実際、Laravel によって自動的に生成されたコードはすでにログインと登録のニーズを満たすことができますが、各ガードには AuthController が必要なので、認証コントローラーを共有するにはどうすればよいでしょうか?ここでガードが使用されているのは、さまざまなロジックを実行するためにユーザーの ID を表すことができるためです。ただし、このガードは認証コントローラーでは取得できないため、
ルーティング パラメーターを渡すことができます 🎜それを達成するための方法。ルーティング グループを定義します: 🎜
$user = Auth::user();
🎜 このルーティング グループでは、現在のガードを AuthController で取得できるように、プレフィックスをガード パラメーターに設定します。通常、ルーティング パラメータは
依存関係注入🎜Request インスタンスを通じて取得しますが、落とし穴もあります。つまり、バージョン 5.1 より前では、ルーティング パラメーターは 🎜
$user = Auth::guard('guard')->user();
🎜 を通じて取得できましたが、5.2 では不可能になりました。これは、🎜rrreee🎜 を通じて取得するか、ルーティング インスタンスから直接取得する必要があります。理由は何ですか。いくつかのトレイトは AuthController コントローラで使用されます。これらのトレイトは、コントローラの一部のプロパティを書き換えることで、ロジックをカスタマイズできます。 $redirectTo$guard$username などが含まれます。一目で、最初のものがログイン成功後にジャンプするものであることがわかります。 2 番目は現在使用されているガードを定義するもので、3 番目は認証に使用されるユーザー名フィールドです。したがって、認証コントローラーでガードを取得することでカスタマイズできます。 🎜🎜🎜🎜#4 ルート保護🎜🎜🎜

一般做认证系统的,都是要来保护路由的,那么如何保护路由呢?文档里面说给需要保护的路由添加一个auth中间件,那么事实是怎样的呢?事实也确实是这样,不过文档没有说的一点是,通过auth中间件保护的路由必须还要加上web中间件、必须还要加上web中间件、必须还要加上web中间件,重要的事情要说三遍啊,不然会出现什么问题呢?不管你认证成功失败都是会跳转到/这条路由,这个大坑要注意!当然你也可以在中间件中指定guard来让Laravel知道通过那个来认证,如果没指定的话就是使用配置文件里面默认的:

Route::get('profile', [ 'middleware' => 'auth:api', 'uses' => 'ProfileController@show']);

#5 获取用户实例

通过认证后就可以通过Auth门面来获取到当前通过认证的用户实例。

$user = Auth::user();

这里还有一个要注意的是,以上的方式默认获取的是配置文件中的guard的,假如你当前登录的guard不是配置文件中的,就必须要这样子来获取:

$user = Auth::guard('guard')->user();

#6 总结

总得来说,Laravel5.2自带的Auth系统还是很好用的,只是有一些小坑文档没说清楚,用过几次之后就可以很熟悉了,可以给我们节约很多的开发时间。

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

PHP实现路由和类自动加载

bindParam和bindValue在Yii2中的使用详解

以上がLaravelはマルチユーザー認証システムを実装していますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PHPはユーザーのセッションをどのように識別しますか?PHPはユーザーのセッションをどのように識別しますか?May 01, 2025 am 12:23 AM

phpidentifiesauser'ssessionsingsinssessionCookiesIds.1)whensession_start()iscalled、phpgeneratesauniquesidstoredsored incoookienadphpsessidontheuser'sbrowser.2)thisidallowsphptortorieSessiondatadata fromthata

PHPセッションを保護するためのベストプラクティスは何ですか?PHPセッションを保護するためのベストプラクティスは何ですか?May 01, 2025 am 12:22 AM

PHPセッションのセキュリティは、次の測定を通じて達成できます。1。session_regenerate_id()を使用して、ユーザーがログインまたは重要な操作である場合にセッションIDを再生します。 2. HTTPSプロトコルを介して送信セッションIDを暗号化します。 3。Session_Save_Path()を使用して、セッションデータを保存し、権限を正しく設定するためのSecure Directoryを指定します。

PHPセッションファイルはデフォルトで保存されていますか?PHPセッションファイルはデフォルトで保存されていますか?May 01, 2025 am 12:15 AM

phpsessionFilesToredInthededirectoryspecifiedBysession.save_path、通常/tmponunix-likesystemsorc:\ windows \ temponwindows.tocustomizethis:1)uesession_save_path()tosetaCustomdirectory、ensuringit'swritadistradistradistradistradistra

PHPセッションからデータをどのように取得しますか?PHPセッションからデータをどのように取得しますか?May 01, 2025 am 12:11 AM

toretrievedatafrompsession、Startthessession withsession_start()andAccessvariablesshe $ _SessionArray.forexample:1)Startthessession:session_start()

セッションを使用してショッピングカートを実装するにはどうすればよいですか?セッションを使用してショッピングカートを実装するにはどうすればよいですか?May 01, 2025 am 12:10 AM

セッションを使用して効率的なショッピングカートシステムを構築する手順には、次のものがあります。1)セッションの定義と機能を理解します。セッションは、リクエスト全体でユーザーのステータスを維持するために使用されるサーバー側のストレージメカニズムです。 2)ショッピングカートに製品を追加するなど、基本的なセッション管理を実装します。 3)製品の量管理と削除をサポートし、高度な使用状況に拡大します。 4)セッションデータを持続し、安全なセッション識別子を使用することにより、パフォーマンスとセキュリティを最適化します。

PHPでインターフェイスをどのように作成して使用しますか?PHPでインターフェイスをどのように作成して使用しますか?Apr 30, 2025 pm 03:40 PM

この記事では、PHPでインターフェイスを作成、実装、および使用する方法について説明し、コード組織と保守性の利点に焦点を当てています。

crypt()とpassword_hash()の違いは何ですか?crypt()とpassword_hash()の違いは何ですか?Apr 30, 2025 pm 03:39 PM

この記事では、PHPのCrypt()とpassword_hash()の違いについて、パスワードハッシュの違いについて説明し、最新のWebアプリケーションの実装、セキュリティ、および適合性に焦点を当てています。

PHPのクロスサイトスクリプト(XSS)をどのように防ぐことができますか?PHPのクロスサイトスクリプト(XSS)をどのように防ぐことができますか?Apr 30, 2025 pm 03:38 PM

記事では、入力検証、出力エンコード、およびOWASP ESAPIやHTML浄化器などのツールを使用して、PHPのクロスサイトスクリプト(XSS)を防止します。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境