ホームページ バックエンド開発 PHPチュートリアル Laravelのマルチユーザー認証システムの紹介

Laravelのマルチユーザー認証システムの紹介

Mar 14, 2018 am 09:17 AM
laravel マルチユーザー 導入

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多用户认证系统


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

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホット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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Laravelは紹介例 Laravelは紹介例 Apr 18, 2025 pm 12:45 PM

Laravelは、Webアプリケーションを簡単に構築するためのPHPフレームワークです。次のような強力な機能を提供します。インストール:Laravel CLIを作曲家にグローバルにインストールし、プロジェクトディレクトリにアプリケーションを作成します。ルーティング:ルート/web.phpのURLとハンドラーの関係を定義します。ビュー:リソース/ビューでビューを作成して、アプリケーションのインターフェイスをレンダリングします。データベース統合:MySQLなどのデータベースとのすぐ外側の統合を提供し、移行を使用してテーブルを作成および変更します。モデルとコントローラー:モデルはデータベースエンティティを表し、コントローラーはHTTP要求を処理します。

クラフトCMSのキャッシングの問題を解決する:Wiejeben/Craft-Laravel-Mixプラグインの使用 クラフトCMSのキャッシングの問題を解決する:Wiejeben/Craft-Laravel-Mixプラグインの使用 Apr 18, 2025 am 09:24 AM

CraftCMSを使用してWebサイトを開発する場合、特にCSSやJavaScriptファイルを頻繁に更新する場合、リソースファイルのキャッシュ問題が発生することがよくあります。古いバージョンのファイルがブラウザによってキャッシュされ、ユーザーが最新の変更を表示しないようにすることがあります。この問題は、ユーザーエクスペリエンスに影響を与えるだけでなく、開発とデバッグの難しさを高めます。最近、プロジェクトで同様のトラブルに遭遇し、いくつかの調査の後、プラグインWiejeben/Craft-Laravel-Mixが見つかりました。

Laravelユーザーログイン機能 Laravelユーザーログイン機能 Apr 18, 2025 pm 12:48 PM

Laravelは、ユーザーモデル(Eloquentモデル)の定義、ログインフォームの作成(ブレードテンプレートエンジン)、ログインコントローラーの作成(認証\ログインコントローラーの継承)、ログイン要求の検証(Auth ::試行)の検証など、ユーザーログイン機能を実装するための包括的なAuthフレームワークを提供します。ヘッダー。さらに、AUTHフレームワークは、パスワードのリセット、電子メールの登録と検証などの機能も提供します。詳細については、Laravelのドキュメントを参照してください:https://laravel.com/doc

LaravelとThe BackEnd:Webアプリケーションロジックの電源 LaravelとThe BackEnd:Webアプリケーションロジックの電源 Apr 11, 2025 am 11:29 AM

Laravelはバックエンドロジックでどのように役割を果たしますか?ルーティングシステム、Eloquentorm、認証と承認、イベントとリスナー、パフォーマンスの最適化を通じてバックエンド開発を簡素化および強化します。 1.ルーティングシステムにより、URL構造の定義とリクエスト処理ロジックが可能になります。 2.Eloquentormは、データベースの相互作用を簡素化します。 3.認証および承認システムは、ユーザー管理に便利です。 4.イベントとリスナーは、ゆるく結合したコード構造を実装します。 5.パフォーマンスの最適化により、キャッシュとキューイングを通じてアプリケーションの効率が向上します。

Laravel Frameworkインストール方法 Laravel Frameworkインストール方法 Apr 18, 2025 pm 12:54 PM

記事の概要:この記事では、Laravelフレームワークを簡単にインストールする方法について読者をガイドするための詳細なステップバイステップの指示を提供します。 Laravelは、Webアプリケーションの開発プロセスを高速化する強力なPHPフレームワークです。このチュートリアルは、システム要件からデータベースの構成とルーティングの設定までのインストールプロセスをカバーしています。これらの手順に従うことにより、読者はLaravelプロジェクトのための強固な基盤を迅速かつ効率的に築くことができます。

Laravelを学ぶ方法Laravelを無料で学ぶ方法 Laravelを学ぶ方法Laravelを無料で学ぶ方法 Apr 18, 2025 pm 12:51 PM

Laravelフレームワークを学びたいが、資源や経済的圧力に苦しんでいないのですか?この記事では、Laravelの無料学習を提供し、オンラインプラットフォーム、ドキュメント、コミュニティフォーラムなどのリソースを使用して、PHP開発の旅から習得するための堅実な基盤を築く方法を教えてくれます。

Laravelのバージョン番号を表示する方法は? Laravelのバージョン番号を表示する方法 Laravelのバージョン番号を表示する方法は? Laravelのバージョン番号を表示する方法 Apr 18, 2025 pm 01:00 PM

Laravelフレームワークには、開発者のさまざまなニーズを満たすためにバージョン番号を簡単に表示するための組み込みの方法があります。この記事では、Composer Command Lineツールの使用、.ENVファイルへのアクセス、PHPコードを介したバージョン情報の取得など、これらの方法について説明します。これらの方法は、Laravelアプリケーションのバージョン化の維持と管理に不可欠です。

Laravelのバージョンは何ですか?初心者向けのLaravelのバージョンを選択する方法 Laravelのバージョンは何ですか?初心者向けのLaravelのバージョンを選択する方法 Apr 18, 2025 pm 01:03 PM

初心者向けのLaravel Frameworkバージョンの選択ガイドでは、この記事は、多くのバージョンの中で初心者が情報に基づいた選択を行うのを支援するように設計されたLaravelのバージョンの違いに分かれています。各リリースの主要な機能に焦点を当て、長所と短所を比較し、初心者がスキルレベルとプロジェクトの要件に基づいてLaravelの最も適切なバージョンを選択できるように便利なアドバイスを提供します。初心者の場合、Laravelの適切なバージョンを選択することは、学習曲線と全体的な開発経験に大きな影響を与える可能性があるため、重要です。

See all articles