この記事ではLaravelのマルチドメイン名でのフィールド検証方法(コード付き)を紹介します。一定の参考価値があります。困っている友人は参考にしてください。お役に立てれば幸いです。
前書き: 作成者がソフトウェアを Web サイトに送信できるようにするための、統合された作成者バックエンドが開発中です。私たちは Web サイトの 1 つ用に作成者バックエンドを開発しました。現在、このバックエンドを他の Web サイトに提供する予定です。これには次のような特徴があります:
訪問するドメイン名は一貫性がありません。解決策については、私の記事の 1 つである Laravel ルーティングの研究: 複数のドメイン名の問題を解決するドメインを参照してください。
関数の分割
始める前に、システムのさまざまな機能点を分割し、影響を受ける点を推定する必要があります。
ログインと登録
ログイン登録機能が最初に矢面に立たされるため、ユーザーは登録時に異なるドメイン名にアクセスし、異なる ID を記録する必要があります。したがって、次の処理を実行する必要があります。
フィールドの追加identity
重度の判定の実行
ログイン認証の実行
データ処理
これについては説明しません。ユーザーのアイデンティティに応じて、呼び出されるデータも異なります。
登録判定
判定根拠: php 職人 make:auth を使用した後、デフォルトでメールがログインに使用され、デフォルトでメールが判定されることがわかっています。フォーム確認です。コードは次のとおりです。
デフォルトのフォーム検証:
// Path:app/Http/Controllers/Auth/RegisterController.php protected function validator(array $data) { return Validator::make($data, [ 'name' => ['required', 'string', 'max:255'], 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], 'password' => ['required', 'string', 'min:8', 'confirmed'], ]); }
デフォルトのログイン検証フィールド
// Path:vendor/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php public function username() { return 'email'; } // 当然可以修改验证字段(看过文档的都知道),注意:登录验证字段必须是在表里面唯一的。
次に、ニーズを分析する必要があります:
単一ユーザー バックグラウンドの場合, 電子メールの判断 重いだけで十分ですが、複数のユーザーには十分ではありません。
仮定: 2 人のユーザー a と b に対応する 2 つのドメイン名 A と B があります。a と b をテーブルに保存する必要があります。まず、a と b がそのドメイン名 (サイト) に属しているかどうかを判断します。次に、「このユーザーは重複していますか?」を参照してください。
Laravel フォーム検証を使用して以下の実装を行います:
フィールドの追加:
デモンストレーションの便宜上、make auth で生成された移行ファイルに直接変更しました。直接変更しないでください。実際のプロジェクトでは、ただし、新しい移行ファイルを作成し、テーブル構造を変更してフィールドを追加します
public function up() { Schema::create('users', function (Blueprint $table) { $table->bigIncrements('id'); $table->string('name'); $table->string('email'); // 去掉原来的unique $table->string('identity'); // 增加的字段 $table->timestamp('email_verified_at')->nullable(); $table->string('password'); $table->rememberToken(); $table->timestamps(); }); }
注: この要件では、電子メールと名前を一意にする必要はありません。移行ファイル内のフィールドは、一意性が独立ではなく依存しているため、修飾されます。
ユーザー登録のシミュレーション、アイデンティティ情報の挿入
// Path: app/Http/Controllers/Auth/RegisterController.php protected function create(array $data) { return User::create([ 'name' => $data['name'], 'email' => $data['email'], 'password' => Hash::make($data['password']), 'identity' => 'pcsoft', // 模拟用户注册时,插入身份字段值 ]); }
重判定処理の実行
protected function validator(array $data) { return Validator::make($data, [ 'name' => ['required', 'string', 'max:255'], 'email' => ['required', 'string', 'email', 'max:255', Rule::unique('users')->where(function ($query) { $query->where('identity', '=', 'onlinedown'); })], // 这句话的意思:按照什么条件对 users 表中的 email 去重,我们需要按照身份字段等于我们访问的域名对 email 去重, 'password' => ['required', 'string', 'min:8', 'confirmed'], ]); }
テスト
最初の登録を実行すると、次のようにデータベースが切断されます。同じメールアドレス、異なる ID で 2 回目の登録:
#同じ ID、同じメール テスト
#ログイン検証
資格情報を上書きして認証フィールドに渡します// Path:app/Http/Controllers/Auth/LoginController.php protected function credentials(Request $request) { $request->merge(['identity' => Controller::getWebPrefix()]); return $request->only($this->username(), 'password', 'identity'); }
PHP ビデオ チュートリアル
]以上がLaravel複数ドメイン名でのフィールド検証方法の紹介(コード付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。