Laravelでパーミッション制御を段階的に実装 (2) ログインの書き換え
Laravel ログインの書き換え
アクセス許可制御は、ほぼすべての成熟したシステムに不可欠な部分です。私たちが使用するアクセス許可制御方法は rbac です。このシリーズの記事では、より複雑な rbac を段階的に完成させます。許可制御。
rbac 権限制御は、各ユーザーに 1 つ以上の役割を与えるという非常に成熟した権限制御システムであり、各役割はシステムの対応するモジュールへのアクセス権を持ちます。具体的な理論的知識は紹介されていません。多くの。この権限制御システムを完成させると、一般ユーザーと管理者ユーザーを別々にデータベースに保存します。この部分は、管理者ユーザーよりも簡単になります。ログインプロセスを理解します。
ログインしていないユーザーはログイン ページにジャンプします使用する前にログインする必要がある特定の機能にアクセスする場合、ログインしているユーザーがいない場合はログイン ページに直接ジャンプする機能がよくあります。この関数は、laravel が提供するコードで非常に簡単に完了できます。
php<br />class HomeController extends Controller { public function __construct() { $this->middleware('auth'); } public function index() { echo url('/home'); echo '这是首页'; }}
使用するためにログインが必要なコントローラーで認証コントローラーを呼び出すだけで、このコントローラーはログインがあるかどうかを確認します。ログインがあるかどうかを判断するためのセッション内の情報 では、「認証」ミドルウェアはどこにあるのでしょうか?
laravel のすべてのミドルウェアは app/Http/Kernel に登録されます
php protected $routeMiddleware = [ 'auth' => 'App\Http\Middleware\Authenticate', 'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth', 'guest' => 'App\Http\Middleware\RedirectIfAuthenticated', 'admin_auth' => 'App\Http\Middleware\AdminPermissionCheck', ];
この配列のキーはミドルウェアのエイリアスで、値はミドルウェアのパスです。エイリアスを見つけることができます。 認証ミドルウェアの場合
find AppHttpMiddlewareAuthenticate
php public function handle($request, Closure $next) { if ($this->auth->guest()) { if ($request->ajax()) { return response('Unauthorized.', 401); } else { //这个方法会跳转到Auth控制器的getLogin方法 //如果没有 那么会自动跳转的视图文件夹下的auth login return redirect()->guest('auth/login'); } } return $next($request); }
ハンドル メソッドは、ミドルウェアを呼び出すときに呼び出されるメソッドです。 ゲストは、ログインがあるかどうかを判断するメソッドです。つまり、ログイン ジャンプ メソッドがない場合、ジャンプ パスは上記のコードに示すように auth/login になります (このパスはルーティングで設定されており、Auth の getLogin メソッドにジャンプします)。コントローラー)
ログイン ビューを作成しますAuthController でログイン ビューを作成します
php public function getLogin(){ return view("auth.login"); }
フォーム データ検証の実装部分は、postLogin メソッドの UserLoginRequest $req です
を作成しますlaravel が提供する phpartian make:request は、フォーム上でデータ検証を行うためのリクエストクラスです。上記のコードのように、リクエストクラス
php<br />class UserLoginRequest extends Request { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return true; } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ //再这里对表单提交字段进行过滤 'identity' => 'required|min:3|max:16', 'password' => 'required|min:6|max:16' ]; } public function sanitize() { return $this->all(); }}
php public function postLogin(UserLoginRequest $req){ //这里对传递过来得字段进行了处理 这个函数为我自己定义的函数 仅仅是为了演示用 $identity = $this->generateLoginIdentity($req->input()); $identity['password'] = $req->input('password'); //验证用户账号密码 if($this->auth->attempt($indentity)){ //登录成功 记录用户登录时间和登录ip $user = User::where('id','=',$this->auth->user()->id)->first(); // 触发一个事件 event(new \App\Events\UserLogin($user,$req->ip())); //重定向到想要访问的页面 return redirect()->intended('/'); } }
を簡単に作成できます。ビジネスのニーズに応じて、渡されたデータをさらに処理します。
ログイン ユーザー関数を検証するコードはこのセクションです $this->auth->attempt($indentity) 検証が成功すると、戻り値が返されます。 true この関数は、laravel 独自の Auth 関数のメソッドであり、渡されたフィールドがテーブル内で照合されると、検証が成功した後にログイン情報がセッションに保存されます。 。もちろん、Auth が一致を検索するテーブルは変更できます。その変更方法は、後で管理者ユーザーのログイン機能を実装するときに説明します。
その後、以下のコードでビジネス ロジックを完成させ続けることができます。私のコードに示すように、ログイン イベントとログイン IP を記録するイベントをトリガーします。
ログイン後、自動的にログイン ページに移動します。 inすでにログインしていてログイン ページにアクセスする場合、ログインを許可するためにログイン ビューを表示する必要はありません。このパスは引き続き変更できます。
まず、Auth を見てみましょう。ログインしたかどうかはコントローラーのどこで判断されますか?
php public function __construct(Guard $auth, Registrar $registrar) { $this->auth = $auth; $this->registrar = $registrar; $this->middleware('guest', ['except' => 'getLogout']); }
Except は、getLogout メソッドがこのミドルウェアの影響を受けないことを意味します。通常はログアウト メソッドです
このコントロールでは、コンストラクター メソッドがミドルウェアを呼び出して、ログインしたかどうかを判断します。 kernel.php を検索すると、このミドルウェア
が見つかります。これは AppHttpMiddlewareRedirectIfAuthenticated.php
php public function handle($request, Closure $next) { if ($this->auth->check()) { //跳转的路径 return new RedirectResponse(url('/')); } return $next($request); }
上記のコードのジャンプを変更するだけです パスを転送するだけです
概要
laravel が多くのログイン関連の関数をカプセル化していることがわかります。非常に完成度が高いです。ですが、必要なビジネス ロジックに応じてログイン関連のプロセスを自由に変更することもできます。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











セッションハイジャックは、次の手順で達成できます。1。セッションIDを取得します。2。セッションIDを使用します。3。セッションをアクティブに保ちます。 PHPでのセッションハイジャックを防ぐための方法には次のものが含まれます。1。セッション_regenerate_id()関数を使用して、セッションIDを再生します。2。データベースを介してストアセッションデータを3。

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

PHP開発における固体原理の適用には、次のものが含まれます。1。単一責任原則(SRP):各クラスは1つの機能のみを担当します。 2。オープンおよびクローズ原理(OCP):変更は、変更ではなく拡張によって達成されます。 3。Lischの代替原則(LSP):サブクラスは、プログラムの精度に影響を与えることなく、基本クラスを置き換えることができます。 4。インターフェイス分離原理(ISP):依存関係や未使用の方法を避けるために、細粒インターフェイスを使用します。 5。依存関係の反転原理(DIP):高レベルのモジュールと低レベルのモジュールは抽象化に依存し、依存関係噴射を通じて実装されます。

phpstormでCLIモードをデバッグする方法は? PHPStormで開発するときは、PHPをコマンドラインインターフェイス(CLI)モードでデバッグする必要がある場合があります。

システムが再起動した後、UnixSocketの権限を自動的に設定する方法。システムが再起動するたびに、UnixSocketの許可を変更するために次のコマンドを実行する必要があります:sudo ...

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHP開発でPHPのCurlライブラリを使用してJSONデータを送信すると、外部APIと対話する必要があることがよくあります。一般的な方法の1つは、Curlライブラリを使用して投稿を送信することです。
