Laravel - 验证电子邮件是否已存在于表用户中

问题描述 投票:0回答:1

我有一个简单的 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);
}

我有两种不同的方法来验证用户电子邮件是否已被使用,但仍然不起作用。

如果有人可以帮助我找出我的错误并提供解决方案或建议,我将不胜感激。

laravel laravel-validation laravel-encryption
1个回答
0
投票

使用 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); }

© www.soinside.com 2019 - 2024. All rights reserved.