Home  >  Article  >  PHP Framework  >  Introduction to field verification methods under Laravel multiple domain names (with code)

Introduction to field verification methods under Laravel multiple domain names (with code)

不言
不言forward
2019-04-04 11:34:462447browse

This article brings you an introduction to the field verification method under Laravel's multi-domain name (with code). It has certain reference value. Friends in need can refer to it. I hope it will be helpful to you.

Foreword: A unified author backend is being developed to allow authors to submit software to the website. We have developed an author backend for one of the websites, and now we plan to provide this backend to other websites. It has the following characteristics:

The domain names we visit are inconsistent. For the solution, see one of my articles, Laravel Routing Research: Domain to Solve Multiple Domain Name Problems

Secondly, each site has different requirements for the backend The requirements are the same, that is to say, one background is used by N stations.

Function Splitting

Before we start, we need to split the various functional points of the system and estimate the affected points:

Login and Register

The login registration function is the first to bear the brunt. We need users to access different domain names and record different identities when registering. So we need to perform the following processing:

Add fieldsidentity

Perform heavy judgment

Perform login verification

Data processing

This will not be discussed. Depending on the identity of the user, the data called is also different.

Registration judgment

Basis for judgment: We know that after using php artisan make:auth, email is used to log in by default, and email is judged by default in form verification. . The code is as follows:

Default form verification:

// 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'],
    ]);
}

Default login verification field

// Path:vendor/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php
public function username()
{
    return 'email';
}
// 当然可以修改验证字段(看过文档的都知道),注意:登录验证字段必须是在表里面唯一的。

Now we need to analyze our needs:
In a single user background, email judgment Heavy enough is enough, but not enough for multiple users.
Assumption: We have two domain names A and B, corresponding to two users a and b. We need to store a and b in a table. First, we determine whether a and b belong to that domain name (site). Secondly, see Is this user a duplicate?
Let’s use Laravel form verification to implement it below:

Add fields:
For the convenience of demonstration, I directly modified it on the migration file generated by make auth. Please do not modify it directly in the actual project. , but by creating a new migration file and adding fields by modifying the table structure

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();
    });
}

Note: In this requirement, we do not need to unique the email and name fields in the migration file Qualified, because their uniqueness is dependent, not independent.

Simulate user registration, insert identity information

// 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', // 模拟用户注册时,插入身份字段值
    ]);
}

Perform heavy judgment processing

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'],
    ]);
}

Test

Perform first registration, the database is cut off as follows:

Introduction to field verification methods under Laravel multiple domain names (with code)

Register for the second time, same email, different identity:

Introduction to field verification methods under Laravel multiple domain names (with code)

Same identity, same email test

Introduction to field verification methods under Laravel multiple domain names (with code)

Login verification

Overwrite credentials and pass in the authentication field

// Path:app/Http/Controllers/Auth/LoginController.php
protected function credentials(Request $request)
{
    $request->merge(['identity' => Controller::getWebPrefix()]);
    return $request->only($this->username(), 'password', 'identity');
}

[Related recommendations: PHP video tutorial]

The above is the detailed content of Introduction to field verification methods under Laravel multiple domain names (with code). For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:segmentfault.com. If there is any infringement, please contact admin@php.cn delete