Search code examples
phpreactjslaraveldatabaselaravel-sanctum

Laravel react Error 500 when login Using Auth


I've been trying to solve this problem for several days but can't figure out the solution. Could you help me please? Laravel UserController code:

public function login(Request $request){
        $request->validate(
            [
                'email'    => 'required',
                'password' => 'required',
            ]
        );
        if (Auth::guard()->attempt([['email' => $request->input('email')], ['password' => $request->input('password')]])) {
            $request->session()->regenerate();
            $user = User::where('email', $request->input('email'));
            if($user != null){
                $user->isLogin = true;
                $user->save();
                return response()->json(['id'=>$user->id], 200);
            }
            return response()->json(['message'=>'User not found'],404);
        }

        return response()->json(['error' => 'Invalid credentials'],400);
     }

React api fetch with axios:

const logIn=(e) =>{
    e.preventDefault();
    axios.post('/api/login', {
        email: email,
        password:password
    }).then(response => {
        if(response.status==200){
          console.log(response.data)
          dispatch(login(response.data.id))
        }
    }).catch(error=>{
        console.log(error.message)
    })
  }

Laravel login in routs:

Route::post('/login', [UserController::class, 'login']);

Laravel log:

[2022-08-10 11:36:34] local.ERROR: SQLSTATE[42S22]: Column not found: 1054 Unknown column '0' in 'where clause' (SQL: select * from users where (0 = id) limit 1) {"exception":"[object] (Illuminate\Database\QueryException(code: 42S22): SQLSTATE[42S22]: Column not found: 1054 Unknown column '0' in 'where clause' (SQL: select * from users where (0 = id) limit 1) at C:\xampp\htdocs\socialmedia\vendor\laravel\framework\src\Illuminate\Database\Connection.php:742)


Solution

  • you are passing multidimensional array in where condition

    Can you try changing this lines

            if (Auth::attempt(['email' => $request->input('email'), 
           'password' => $request->input('password')])) {
    //here we are getting the first value
           User::where('email', $request->input('email'))->first()
    

    You can see this doc for more info related to login https://laravel.com/docs/9.x/authentication#authenticating-users