Home >PHP Framework >Laravel >Introduction to field verification methods under Laravel multiple domain names (with code)
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
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:Same identity, same email test
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!