Home > Mobile >  Return JSON response in Laravel for duplicate email login via API
Return JSON response in Laravel for duplicate email login via API

Time:12-16

This is my API register method for taking new user registration into the Database.

public function register(Request $request)
    {
        $user = new User();
        $user->name = $request->input('name');
       $user->email = $request->input('email');
        $user->password = Hash::make($request->input('password'));
        if($user->save()){
           response (['result' => true]);
        }
        return response(['result' => false,]);
    }

Now when I register from the same email Id, I am getting errors like below

Illuminate\Database\QueryException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '[email protected]' for key 'users_email_unique' (SQL: insert into `users` (`name`, `email`, `password`, `updated_at`, `created_at`) values (Pramod, [email protected], y$WJJrNjB8K/jGSXpPagVjSujZcifKXrzs3gnvPcjSK3W1c.IekaBna, 2021-12-16 07:46:56, 2021-12-16 07:46:56))

I want to get a false result response on a duplicate email registration

CodePudding user response:

You can add Validation using Exists: Example: $user->where('email',$request->input('email'))->exists()

See the below code:

public function register(Request $request)
{
   $user = new User();
   if(!$user->where('email',$request->input('email'))->exists()){
      $user->name = $request->input('name');
      $user->email = $request->input('email');
      $user->password = Hash::make($request->input('password'));
      if($user->save()){
        return response(['result' => true]);
      }else{
        return response(['result' => false]);
      }
   }
   return response(['result' => false,]);
}

CodePudding user response:

You can use Laravel validation:

public function register(Request $request)
    {
        $validated = $request->validate([
            'email' => 'required|unique:users',
        ]);

    if($validation->fails()){
        return response()->json($validation->errors());
    }

        $user = new User();
        $user->name = $request->input('name');
        $user->email = $request->input('email');
        $user->password = Hash::make($request->input('password'));
        if($user->save()){
           return response (['result' => true]);
        }
        return response(['result' => false,]);
    }

CodePudding user response:

You can be use Form Request.

https://laravel.com/docs/8.x/validation#form-request-validation

or you can use the following

public function register(Request $request){
    $data = $request->validate([
        'email'     => 'required|email|unique:users',
        'name'      => 'required|string',
        'password'  => 'required|string'
    ]);

    $data['password'] = bcrypt($data['password']);

    try {
        User::create($data);
        return response()->json([
            'message' => __('User created'),
            'result'  => true
        ]);
    }catch (\Exception $exception){
        return response()->json([
            'message' => $exception->getMessage(),
            'result'  => false
        ]);
    }
}
  • Related