本文目录导读:

在 Laravel 中实现密码确认验证,主要有以下几种方式:
基本密码确认验证
表单验证规则
use Illuminate\Support\Facades\Validator;
$validator = Validator::make($request->all(), [
'password' => 'required|min:8|confirmed',
// 'password_confirmation' => 'required|min:8' // 不需要手动添加,confirmed会自动验证
]);
在控制器中使用
public function store(Request $request)
{
$validated = $request->validate([
'password' => 'required|min:8|confirmed',
]);
// 创建用户等操作
}
自定义密码确认验证
使用 Rule 类
use Illuminate\Validation\Rule;
$validator = Validator::make($request->all(), [
'password' => [
'required',
'string',
'min:8',
'confirmed',
Rule::notIn(['password', '12345678']), // 禁止使用的密码
],
]);
自定义确认规则
$validator = Validator::make($request->all(), [
'password' => [
'required',
'min:8',
function ($attribute, $value, $fail) {
// 自定义验证逻辑
if (!preg_match('/[A-Z]/', $value)) {
$fail('密码必须包含大写字母');
}
if (!preg_match('/[0-9]/', $value)) {
$fail('密码必须包含数字');
}
},
'confirmed',
],
]);
使用 FormRequest 类(推荐)
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class RegisterRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'name' => 'required|string|max:255',
'email' => 'required|string|email|unique:users',
'password' => [
'required',
'string',
'min:8',
'confirmed',
'regex:/^(?=.*[A-Za-z])(?=.*\d)/', // 必须包含字母和数字
],
];
}
public function messages()
{
return [
'password.required' => '密码不能为空',
'password.min' => '密码至少8个字符',
'password.confirmed' => '两次输入的密码不一致',
'password.regex' => '密码必须包含字母和数字',
];
}
}
密码确认的完整示例
用户注册
public function register(RegisterRequest $request)
{
$user = User::create([
'name' => $request->name,
'email' => $request->email,
'password' => Hash::make($request->password),
]);
return response()->json(['user' => $user], 201);
}
密码修改
public function updatePassword(Request $request)
{
$request->validate([
'current_password' => ['required', 'current_password'],
'new_password' => ['required', 'string', 'min:8', 'confirmed'],
]);
$user = $request->user();
$user->update([
'password' => Hash::make($request->new_password),
]);
return redirect()->back()->with('success', '密码修改成功');
}
自定义密码确认验证器
<?php
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
class PasswordConfirmation implements Rule
{
protected $password;
protected $confirmation;
public function __construct($password = null)
{
$this->password = $password;
}
public function passes($attribute, $value)
{
$this->confirmation = $value;
return $this->password === $value;
}
public function message()
{
return '两次输入的密码不一致';
}
}
// 使用方法
$rules = [
'password' => ['required', new PasswordConfirmation($request->password_confirmation)],
];
前端配合示例
<!-- 注册表单 -->
<form method="POST" action="{{ route('register') }}">
@csrf
<div>
<label for="password">密码</label>
<input type="password"
name="password"
id="password"
value="{{ old('password') }}"
class="form-control @error('password') is-invalid @enderror">
@error('password')
<span class="invalid-feedback">{{ $message }}</span>
@enderror
</div>
<div>
<label for="password_confirmation">确认密码</label>
<input type="password"
name="password_confirmation"
id="password_confirmation"
class="form-control @error('password') is-invalid @enderror">
</div>
</form>
高级密码规则(安全性)
$rules = [
'password' => [
'required',
'string',
'min:8', // 最小长度
'max:255', // 最大长度
'confirmed', // 确认密码
'unique:users', // 不能与旧密码相同(需要自定义验证)
'regex:/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])/', // 包含大小写字母、数字、特殊字符
'not_regex:/\s/', // 不能包含空格
],
'password_confirmation' => 'required|same:password',
];
数据库直接验证(不推荐)
// 使用 DB facade
use Illuminate\Support\Facades\DB;
$user = DB::table('users')
->where('email', $request->email)
->first();
if (Hash::check($request->password, $user->password)) {
// 密码正确
}
注意事项
- 字段命名:默认要求密码字段名为
password,确认字段名为password_confirmation - 自动验证:
confirmed规则会自动检查password_confirmation字段 - 错误消息:可以通过
messages()方法自定义错误消息 - 安全性:密码存储必须使用
Hash::make()加密 - 实时验证:可以配合前端 JavaScript 实现实时验证
选择哪种方式取决于你的需求,推荐使用 FormRequest 方式,因为它更结构化且易于维护。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播