--- a/homeassistant/auth/providers/command_line.py 2024-02-04 01:41:34.460181490 +0100 +++ b/homeassistant/auth/providers/command_line.py 2024-02-04 01:46:55.952650748 +0100 @@ -118,6 +118,13 @@ username = flow_result["username"].strip().casefold() users = await self.store.async_get_users() + hass = async_get_hass() + meta = self._user_meta.get(flow_result["username"], {}) + + pretty_name = meta.get("fullname") + if not pretty_name: + pretty_name = flow_result["username"] + for user in users: if user.name and user.name.strip().casefold() != username: continue @@ -127,28 +134,34 @@ for credential in await self.async_credentials(): if credential.data["username"] and credential.data["username"].strip().casefold() == username: + coll: person.PersonStorageCollection = hass.data[person.DOMAIN][1] + found = False + for pers in coll.async_items(): + if pers.get(person.ATTR_USER_ID) == user.id: + found = True + break + + if "person" in hass.config.components and not found: + await person.async_create_person(hass, pretty_name, user_id=user.id) + return credential cred = self.async_create_credentials({"username": username}) await self.store.async_link_user(user, cred) return cred - hass = async_get_hass() - meta = self._user_meta.get(flow_result["username"], {}) - provider = _async_get_hass_provider(hass) await provider.async_initialize() user = await hass.auth.async_create_user(flow_result["username"], group_ids=[meta.get("group")]) cred = await provider.async_get_or_create_credentials({"username": flow_result["username"]}) - pretty_name = meta.get("fullname") - if not pretty_name: - pretty_name = flow_result["username"] await provider.data.async_save() await hass.auth.async_link_user(user, cred) + if "person" in hass.config.components: await person.async_create_person(hass, pretty_name, user_id=user.id) + # Create new credentials. return cred