初始化本地仓库
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace app\api\validate\auth;
|
||||
|
||||
use core\base\BaseValidate;
|
||||
|
||||
/**
|
||||
* 登录参数验证器
|
||||
*/
|
||||
class LoginValidate extends BaseValidate
|
||||
{
|
||||
/**
|
||||
* 验证规则
|
||||
*/
|
||||
protected array $rules = [
|
||||
'username' => 'required|min:3|max:50',
|
||||
'password' => 'required|min:6|max:32',
|
||||
'captcha' => 'sometimes|max:10',
|
||||
];
|
||||
|
||||
/**
|
||||
* 验证提示信息
|
||||
*/
|
||||
protected array $message = [
|
||||
'username.required' => '用户名不能为空',
|
||||
'username.min' => '用户名长度不能少于3个字符',
|
||||
'username.max' => '用户名长度不能超过50个字符',
|
||||
'password.required' => '密码不能为空',
|
||||
'password.min' => '密码长度不能少于6个字符',
|
||||
'password.max' => '密码长度不能超过32个字符',
|
||||
'captcha.max' => '验证码长度不能超过10个字符',
|
||||
];
|
||||
|
||||
/**
|
||||
* 验证场景
|
||||
*/
|
||||
protected array $scene = [
|
||||
'login' => ['username', 'password', 'captcha'],
|
||||
'quick_login' => ['username', 'password'],
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace app\api\validate\auth;
|
||||
|
||||
use core\base\BaseValidate;
|
||||
|
||||
/**
|
||||
* 手机验证码登录参数验证器
|
||||
*/
|
||||
class MobileLoginValidate extends BaseValidate
|
||||
{
|
||||
/**
|
||||
* 验证规则
|
||||
*/
|
||||
protected array $rules = [
|
||||
'mobile' => 'required|regex:/^1[3-9]\d{9}$/',
|
||||
'code' => 'required|digits_between:4,6',
|
||||
];
|
||||
|
||||
/**
|
||||
* 验证提示信息
|
||||
*/
|
||||
protected array $message = [
|
||||
'mobile.required' => '手机号不能为空',
|
||||
'mobile.regex' => '手机号格式不正确',
|
||||
'code.required' => '验证码不能为空',
|
||||
'code.digits_between' => '验证码长度必须为4-6位',
|
||||
];
|
||||
|
||||
/**
|
||||
* 验证场景
|
||||
*/
|
||||
protected array $scene = [
|
||||
'login' => ['mobile', 'code'],
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace app\api\validate\auth;
|
||||
|
||||
use app\model\member\Member;
|
||||
use core\base\BaseValidate;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
/**
|
||||
* 用户注册参数验证器
|
||||
*/
|
||||
class RegisterValidate extends BaseValidate
|
||||
{
|
||||
/**
|
||||
* 验证规则 - 使用方法定义,支持动态规则
|
||||
*/
|
||||
public function rules(): array
|
||||
{
|
||||
// 获取路由参数ID(更新场景时用于排除唯一验证)
|
||||
$id = request()->route->param('id');
|
||||
|
||||
return [
|
||||
'username' => [
|
||||
'required',
|
||||
'min:3',
|
||||
'max:50',
|
||||
'alpha_dash',
|
||||
Rule::unique(Member::class, 'username')->ignore($id ?? null, 'id'),
|
||||
],
|
||||
'password' => 'required|min:6|max:32|confirmed:confirm_password',
|
||||
'email' => [
|
||||
'required',
|
||||
'email',
|
||||
Rule::unique(Member::class, 'email')->ignore($id ?? null, 'id'),
|
||||
],
|
||||
'mobile' => [
|
||||
'sometimes',
|
||||
'regex:/^1[3-9]\d{9}$/',
|
||||
Rule::unique(Member::class, 'mobile')->ignore($id ?? null, 'id'),
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* 验证提示信息
|
||||
*/
|
||||
protected array $message = [
|
||||
'username.required' => '用户名不能为空',
|
||||
'username.min' => '用户名长度不能少于3个字符',
|
||||
'username.max' => '用户名长度不能超过50个字符',
|
||||
'username.alpha_dash' => '用户名只能包含字母、数字、下划线和破折号',
|
||||
'username.unique' => '用户名已存在',
|
||||
'password.required' => '密码不能为空',
|
||||
'password.min' => '密码长度不能少于6个字符',
|
||||
'password.max' => '密码长度不能超过32个字符',
|
||||
'password.confirmed' => '两次输入的密码不一致',
|
||||
'email.email' => '邮箱格式不正确',
|
||||
'email.unique' => '邮箱已存在',
|
||||
'mobile.regex' => '手机号格式不正确',
|
||||
'mobile.unique' => '手机号已存在',
|
||||
];
|
||||
|
||||
/**
|
||||
* 验证场景
|
||||
*/
|
||||
protected array $scene = [
|
||||
'register' => ['username', 'password', 'email', 'mobile'],
|
||||
'quick_register' => ['username', 'password'],
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,73 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace app\api\validate\auth;
|
||||
|
||||
use app\enum\member\ThirdPartyPlatform;
|
||||
use core\base\BaseValidate;
|
||||
|
||||
/**
|
||||
* 绑定验证器
|
||||
*/
|
||||
class ThirdPartyAuthValidate extends BaseValidate
|
||||
{
|
||||
/**
|
||||
* 验证规则
|
||||
*/
|
||||
protected array $rule = [
|
||||
'platform' => 'required|integer|checkPlatform',
|
||||
'openid' => 'required|string|max:255',
|
||||
'unionid' => 'max:255',
|
||||
'nickname' => 'max:50',
|
||||
'avatar' => 'max:255',
|
||||
'gender' => 'integer|between:0,2',
|
||||
'country' => 'max:50',
|
||||
'province' => 'max:50',
|
||||
'city' => 'max:50',
|
||||
'access_token' => 'max:255',
|
||||
'refresh_token' => 'max:255',
|
||||
];
|
||||
|
||||
/**
|
||||
* 验证消息
|
||||
*/
|
||||
protected array $message = [
|
||||
'platform.required' => '平台类型不能为空',
|
||||
'platform.integer' => '平台类型必须是整数',
|
||||
'openid.required' => 'OpenID不能为空',
|
||||
'openid.string' => 'OpenID必须是字符串',
|
||||
'openid.max' => 'OpenID不能超过255个字符',
|
||||
'unionid.max' => 'UnionID不能超过255个字符',
|
||||
'nickname.max' => '昵称不能超过50个字符',
|
||||
'avatar.max' => '头像地址不能超过255个字符',
|
||||
'gender.integer' => '性别必须是整数',
|
||||
'gender.between' => '性别只能是0-2',
|
||||
'country.max' => '国家不能超过50个字符',
|
||||
'province.max' => '省份不能超过50个字符',
|
||||
'city.max' => '城市不能超过50个字符',
|
||||
'access_token.max' => '访问令牌不能超过255个字符',
|
||||
'refresh_token.max' => '刷新令牌不能超过255个字符',
|
||||
];
|
||||
|
||||
/**
|
||||
* 验证场景
|
||||
*/
|
||||
protected array $scene = [
|
||||
'bind' => ['platform', 'openid', 'unionid', 'nickname', 'avatar', 'gender', 'country', 'province', 'city', 'access_token', 'refresh_token'],
|
||||
'qrCode' => ['platform'],
|
||||
];
|
||||
|
||||
/**
|
||||
* 检查平台类型是否有效
|
||||
*/
|
||||
protected function checkPlatform($value, $rule, $data): bool
|
||||
{
|
||||
$platform = ThirdPartyPlatform::tryFrom((int)$value);
|
||||
if (!$platform) {
|
||||
$this->error = '无效的平台类型';
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user