json([ 'success' => false, 'message' => 'Token not provided', ], 401); } \Log::info('📥 Current Token:', ['token' => (string) $currentToken]); // Try refreshing token $newToken = JWTAuth::refresh($currentToken); \Log::info('✅ Token refreshed successfully', ['new_token' => $newToken]); return response()->json([ 'success' => true, 'token' => $newToken, ]); } catch (\Tymon\JWTAuth\Exceptions\TokenExpiredException $e) { \Log::error('❌ TokenExpiredException in refreshToken()', [ 'message' => $e->getMessage(), ]); return response()->json([ 'success' => false, 'message' => 'Token expired, cannot refresh.', ], 401); } catch (\Tymon\JWTAuth\Exceptions\TokenInvalidException $e) { \Log::error('❌ TokenInvalidException in refreshToken()', [ 'message' => $e->getMessage(), ]); return response()->json([ 'success' => false, 'message' => 'Invalid token.', ], 401); } catch (\Tymon\JWTAuth\Exceptions\JWTException $e) { \Log::error('❌ JWTException in refreshToken()', [ 'message' => $e->getMessage(), ]); return response()->json([ 'success' => false, 'message' => 'Could not refresh token.', ], 401); } catch (\Exception $e) { \Log::error('❌ General Exception in refreshToken()', [ 'message' => $e->getMessage(), 'trace' => $e->getTraceAsString(), ]); return response()->json([ 'success' => false, 'message' => 'Unexpected error while refreshing token.', ], 500); } } /** * User Login */ public function login(Request $request) { $request->validate([ 'login_id' => 'required|string', // can be email, mobile, or customer_id 'password' => 'required|string', ]); // Find user by email OR mobile_no OR customer_id $user = User::where('email', $request->login_id) ->orWhere('mobile_no', $request->login_id) ->orWhere('customer_id', $request->login_id) ->first(); if (!$user) { return response()->json([ 'success' => false, 'message' => 'User not found with given credentials.', ], 404); } // Check hashed password if (!Hash::check($request->password, $user->password)) { return response()->json([ 'success' => false, 'message' => 'Incorrect password.', ], 401); } // Generate JWT token $token = JWTAuth::fromUser($user); return response()->json([ 'success' => true, 'message' => 'Login successful.', 'token' => $token, 'user' => [ 'id' => $user->id, 'customer_id' => $user->customer_id, 'customer_name' => $user->customer_name, 'company_name' => $user->company_name, 'email' => $user->email, 'mobile_no' => $user->mobile_no, 'address' => $user->address, 'pincode' => $user->pincode, ] ]); } /** * User Logout */ public function logout(Request $request) { try { JWTAuth::invalidate(JWTAuth::getToken()); return response()->json([ 'success' => true, 'message' => 'Logout successful.', ]); } catch (\Exception $e) { return response()->json([ 'success' => false, 'message' => 'Failed to logout. Token may be invalid or expired.', ], 500); } } }