diff --git a/homeassistant/components/withings/config_flow.py b/homeassistant/components/withings/config_flow.py
index 150c0d528906110aeaf9809882e9f397ab8f2e25..d7f07ccc18469c4c14e8073892f9911fabbc6997 100644
--- a/homeassistant/components/withings/config_flow.py
+++ b/homeassistant/components/withings/config_flow.py
@@ -9,7 +9,7 @@ from typing import Any
 from aiowithings import AuthScope
 
 from homeassistant.components.webhook import async_generate_id
-from homeassistant.config_entries import ConfigEntry, ConfigFlowResult
+from homeassistant.config_entries import SOURCE_REAUTH, ConfigFlowResult
 from homeassistant.const import CONF_NAME, CONF_TOKEN, CONF_WEBHOOK_ID
 from homeassistant.helpers import config_entry_oauth2_flow
 
@@ -23,8 +23,6 @@ class WithingsFlowHandler(
 
     DOMAIN = DOMAIN
 
-    reauth_entry: ConfigEntry | None = None
-
     @property
     def logger(self) -> logging.Logger:
         """Return logger."""
@@ -42,9 +40,6 @@ class WithingsFlowHandler(
         self, entry_data: Mapping[str, Any]
     ) -> ConfigFlowResult:
         """Perform reauth upon an API authentication error."""
-        self.reauth_entry = self.hass.config_entries.async_get_entry(
-            self.context["entry_id"]
-        )
         return await self.async_step_reauth_confirm()
 
     async def async_step_reauth_confirm(
@@ -52,18 +47,17 @@ class WithingsFlowHandler(
     ) -> ConfigFlowResult:
         """Confirm reauth dialog."""
         if user_input is None:
-            assert self.reauth_entry
             return self.async_show_form(
                 step_id="reauth_confirm",
-                description_placeholders={CONF_NAME: self.reauth_entry.title},
+                description_placeholders={CONF_NAME: self._get_reauth_entry().title},
             )
         return await self.async_step_user()
 
     async def async_oauth_create_entry(self, data: dict[str, Any]) -> ConfigFlowResult:
         """Create an entry for the flow, or update existing entry."""
         user_id = str(data[CONF_TOKEN]["userid"])
-        if not self.reauth_entry:
-            await self.async_set_unique_id(user_id)
+        await self.async_set_unique_id(user_id)
+        if self.source != SOURCE_REAUTH:
             self._abort_if_unique_id_configured()
 
             return self.async_create_entry(
@@ -71,9 +65,7 @@ class WithingsFlowHandler(
                 data={**data, CONF_WEBHOOK_ID: async_generate_id()},
             )
 
-        if self.reauth_entry.unique_id == user_id:
-            return self.async_update_reload_and_abort(
-                self.reauth_entry, data={**self.reauth_entry.data, **data}
-            )
-
-        return self.async_abort(reason="wrong_account")
+        self._abort_if_unique_id_mismatch(reason="wrong_account")
+        return self.async_update_reload_and_abort(
+            self._get_reauth_entry(), data_updates=data
+        )