ホームページ  >  記事  >  PHPフレームワーク  >  Laravel複数ドメイン名でのフィールド検証方法の紹介(コード付き)

Laravel複数ドメイン名でのフィールド検証方法の紹介(コード付き)

不言
不言転載
2019-04-04 11:34:462448ブラウズ

この記事ではLaravelのマルチドメイン名でのフィールド検証方法(コード付き)を紹介します。一定の参考価値があります。困っている友人は参考にしてください。お役に立てれば幸いです。

前書き: 作成者がソフトウェアを Web サイトに送信できるようにするための、統合された作成者バックエンドが開発中です。私たちは Web サイトの 1 つ用に作成者バックエンドを開発しました。現在、このバックエンドを他の Web サイトに提供する予定です。これには次のような特徴があります:

訪問するドメイン名は一貫性がありません。解決策については、私の記事の 1 つである Laravel ルーティングの研究: 複数のドメイン名の問題を解決するドメインを参照してください。

第 2 に、それぞれのサイトにはバックエンドの要件が異なります。要件は同じです。つまり、1 つのバックエンドが N 個のステーションで使用されます。

関数の分割

始める前に、システムのさまざまな機能点を分割し、影響を受ける点を推定する必要があります。

ログインと登録

ログイン登録機能が最初に矢面に立たされるため、ユーザーは登録時に異なるドメイン名にアクセスし、異なる 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'],
    ]);
}

テスト

最初の登録を実行すると、次のようにデータベースが切断されます。

Laravel複数ドメイン名でのフィールド検証方法の紹介(コード付き)同じメールアドレス、異なる ID で 2 回目の登録:


Laravel複数ドメイン名でのフィールド検証方法の紹介(コード付き)#同じ ID、同じメール テスト


#ログイン検証Laravel複数ドメイン名でのフィールド検証方法の紹介(コード付き)

資格情報を上書きして認証フィールドに渡します

// 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 サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。