我有一个简单的 Angular 16 登录/注册表单;
当用户在我的应用程序中注册时,注册数据将通过 http 请求发送到我的 laravel 后端,我在其中处理用户注册。
在创建新用户之前,我会验证之前注册的任何其他用户是否使用相同的电子邮件,如果是,我必须通知该电子邮件不再可用。
我的问题来自于这个验证。我的数据库中存储了用户 A 的电子邮件地址 [电子邮件受保护],但是当我尝试注册另一个用户时,用户 B 具有相同的电子邮件地址,验证器允许它并再次创建用户。
我使用
$casts
加密电子邮件和其他一些敏感数据,然后将其存储在数据库中。
UserModel
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;
class User extends Authenticatable
{
protected $casts = [
'name' => "encrypted",
'email' => "encrypted",
"phone_number" => "encrypted",
"password" => "encrypted"
];
}
这就是我加密用户表上的数据的方式;
然后在我的
UsersController
中的 addUser 函数上,我有:
public function addUser(Request $request)
{
$validator = Validator::make($request->all(), [
'email' => 'required|email|unique:users,email',
'name' => 'required',
'password' => 'required|min:8',
'passwordConfirmation' => 'required|same:password',
]);
if ($validator->fails()) {
return response(['error' => 'Account already exists.'], 401);
}
$existingUser = User::where('email', $request->input("email"))->first();
if ($existingUser) {
return response(['error' => 'Account already exists.'], 401);
}
$user = User::create([
"name" => $request->input("name"),
"email" => $request->input("email"),
"phone_number" => $request->input("phone_number"),
"password" => $request->input("password"),
"user_type" => $request->input("user_type"),
]);
return response($user, 200);
}
我有两种不同的方法来验证用户电子邮件是否已被使用,但仍然不起作用。
如果有人可以帮助我找出我的错误并提供解决方案或建议,我将不胜感激。
使用 Illuminate\Support\Facades\Crypt;使用 Illuminate\Http\Request;使用 Illuminate\Support\Facades\Validator; public function addUser(Request $request){ $validator = Validator::make($request->all(), [ 'email' => 'required|email', 'name' => 'required', 'password' = > '必需|分钟:8', '密码确认' => '必需|相同:密码', ]); if ($validator->fails()) { return response(['error' => '无效数据。'], 400); } // 解密加密的电子邮件 $decryptedEmail = Crypt::decrypt($request->input('email')); // 检查解密的电子邮件是否已存在于数据库中 $existingUser = User::where('email', $decryptedEmail)->first(); if ($existingUser) { return response(['error' => '帐户已存在。'], 401); } $user = User::create([ "name" => $request->input("name"), "email" => $decryptedEmail, // 使用解密的电子邮件进行数据库插入 "phone_number" => $request-> input("phone_number"), "password" => $request->input("password"), "user_type" => $request->input("user_type"), ]); 返回响应($用户,200); }