本篇文章给大家带来的内容是关于Laravel多域名下的字段验证方法介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
前言:正在开发一个统一作者后台,用来让作者给网站提交软件。我们已经对其中一个网站开发了作者后台,现在我们打算将这一个后台提供给其他网站。它具备如下的一些特点:
我们访问的域名是不一致的,解决方案见我的一篇文章,Laravel 路由研究之domain 解决多域名问题
功能拆分
开始之前我们需要对系统各个功能点进行拆分,估算受影响的点:
登录注册
登录注册功能首当其冲,我们需要用户在注册时通过访问的域名不同,记录的身份也不同。所以我们需要进行如下的处理:
增加字段identity
进行判重
进行登录验证
数据处理
这个就不进行讨论了。根据用户所属身份不同,调用的数据也不同就行了。
注册判重
判重依据:我们知道使用php artisan make:auth 后,默认使用email登录,在表单验证中默认对email进行判重。代码如下:
默认表单验证:
// 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'; } // 当然可以修改验证字段(看过文档的都知道),注意:登录验证字段必须是在表里面唯一的。
现在我们需要分析我们的需求:
在单一用户后台中,email判重已经足够了,但是对于多种用户一起使用就不太够了。
假设:我们有A,B两个域名,对应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(); }); }
注意: 在这个需求中,我们对迁移文件中的email和name字段不需要进行unique限定,因为他们的唯一性是有依赖的,不是独立的。
模拟用户注册,插入身份信息
// 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'], ]); }
测试
进行第一次注册,数据库截如下:相同身份,相同邮箱测试
登录验证
覆写credentials,传入身份验证字段
// 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中文网其他相关文章!

本篇文章给大家带来了关于laravel的相关知识,其中主要介绍了关于单点登录的相关问题,单点登录是指在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于laravel的相关知识,其中主要介绍了关于Laravel的生命周期相关问题,Laravel 的生命周期从public\index.php开始,从public\index.php结束,希望对大家有帮助。

在laravel中,guard是一个用于用户认证的插件;guard的作用就是处理认证判断每一个请求,从数据库中读取数据和用户输入的对比,调用是否登录过或者允许通过的,并且Guard能非常灵活的构建一套自己的认证体系。

laravel中asset()方法的用法:1、用于引入静态文件,语法为“src="{{asset(‘需要引入的文件路径’)}}"”;2、用于给当前请求的scheme前端资源生成一个url,语法为“$url = asset('前端资源')”。

本篇文章给大家带来了关于laravel的相关知识,其中主要介绍了关于中间件的相关问题,包括了什么是中间件、自定义中间件等等,中间件为过滤进入应用的 HTTP 请求提供了一套便利的机制,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于laravel的相关知识,其中主要介绍了关于使用中间件记录用户请求日志的相关问题,包括了创建中间件、注册中间件、记录用户访问等等内容,下面一起来看一下,希望对大家有帮助。

在laravel中,fill方法是一个给Eloquent实例赋值属性的方法,该方法可以理解为用于过滤前端传输过来的与模型中对应的多余字段;当调用该方法时,会先去检测当前Model的状态,根据fillable数组的设置,Model会处于不同的状态。

laravel路由文件在“routes”目录里。Laravel中所有的路由文件定义在routes目录下,它里面的内容会自动被框架加载;该目录下默认有四个路由文件用于给不同的入口使用:web.php、api.php、console.php等。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

WebStorm Mac版
好用的JavaScript开发工具

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

禅工作室 13.0.1
功能强大的PHP集成开发环境