当前位置:首页 > CMS教程 > 其它CMS > 列表

Laravel多域名下字段验证的方法

发布:smiling 来源: PHP粉丝网  添加日期:2021-11-15 10:45:00 浏览: 评论:0 

这篇文章主要给大家介绍了关于Laravel多域名下字段验证的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Laravel具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧。

前言:正在开发一个统一作者后台,用来让作者给网站提交软件。我们已经对其中一个网站开发了作者后台,现在我们打算将这一个后台提供给其他网站,它具备如下的一些特点:

我们访问的域名是不一致的,解决方案见我的一篇文章,Laravel 路由研究之domain 解决多域名问题

其次各个站点对后台的要求都是一致的,也就是说,一个后台N各站去用。

功能拆分

开始之前我们需要对系统各个功能点进行拆分,估算受影响的点:

登录注册

登录注册功能首当其冲,我们需要用户在注册时通过访问的域名不同,记录的身份也不同,所以我们需要进行如下的处理:

增加字段identity

进行判重

进行登录验证

数据处理

这个就不进行讨论了。根据用户所属身份不同,调用的数据也不同就行了。

注册判重

判重依据:

我们知道使用php artisan make:auth 后,默认使用email登录,在表单验证中默认对email进行判重,代码如下:

默认表单验证:

  1. // Path:app/Http/Controllers/Auth/RegisterController.php 
  2. protected function validator(array $data
  3.  return Validator::make($data, [ 
  4.  'name' => ['required''string''max:255'], 
  5.  'email' => ['required''string''email''max:255''unique:users'], 
  6.  'password' => ['required''string''min:8''confirmed'], 
  7.  ]); 

默认登录验证字段

  1. Path:vendor/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php 
  2. public function username() 
  3.  return 'email'

当然可以修改验证字段(看过文档的都知道),注意:登录验证字段必须是在表里面唯一的。

现在我们需要分析我们的需求:

在单一用户后台中,email判重已经足够了,但是对于多种用户一起使用就不太够了。

假设:我们有A,B两个域名,对应a,b两种用户,我们需要在一张表中存储a,b,首先我们判断a,b是属于那个域名的(站点),其次,看这个用户是否重复。

下面我们用Laravel表单验证来实现一下:

1、增加字段:

为方便演示,我直接在 make auth 生成的迁移文件上直接修改,大家不要在实际项目中直接修改,而是通过新建迁移文件,使用修改表结构的方式增加字段

  1. public function up() 
  2.  Schema::create('users'function (Blueprint $table) { 
  3.  $table->bigIncrements('id'); 
  4.  $table->string('name'); 
  5.  $table->string('email'); // 去掉原来的unique 
  6.  $table->string('identity'); // 增加的字段 
  7.  $table->timestamp('email_verified_at')->nullable(); 
  8.  $table->string('password'); 
  9.  $table->rememberToken(); 
  10.  $table->timestamps(); 
  11.  }); 

注意: 在这个需求中,我们对迁移文件中的email和name字段不需要进行unique限定,因为他们的唯一性是有依赖的,不是独立的。

2、模拟用户注册,插入身份信息

  1. // Path: app/Http/Controllers/Auth/RegisterController.php 
  2. protected function create(array $data
  3.  return User::create([ 
  4.  'name' => $data['name'], 
  5.  'email' => $data['email'], 
  6.  'password' => Hash::make($data['password']), 
  7.  'identity' => 'pcsoft'// 模拟用户注册时,插入身份字段值 
  8.  ]); 

3、进行判重处理

  1. protected function validator(array $data
  2.  return Validator::make($data, [ 
  3.  'name' => ['required''string''max:255'], 
  4.  'email' => ['required''string''email''max:255', Rule::unique('users')->where(function ($query) { 
  5.   $query->where('identity''=''onlinedown'); 
  6.  })], // 这句话的意思:按照什么条件对 users 表中的 email 去重,我们需要按照身份字段等于我们访问的域名对 email 去重, 
  7.  'password' => ['required''string''min:8''confirmed'], 
  8.  ]); 

4、测试

进行第一次注册,数据库截如下:

Laravel多域名 Laravel字段验证

进行第二次注册,相同邮件,不同身份:

Laravel多域名 Laravel字段验证

相同身份,相同邮箱测试

Laravel多域名 Laravel字段验证

登录验证

覆写credentials,传入身份验证字段

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

Tags: Laravel多域名 Laravel字段验证

分享到: