Skip to main content

身份验证提供者

身份验证提供者确认用户的身份。用户通过经过身份验证提供者的登录流程来证明自己的身份。身份验证提供者定义了登录流程,并可以要求用户提供其所需的所有信息。这通常是用户名和密码,但也可能包括两步验证令牌或其他挑战。

一旦身份验证提供者确认了用户的身份,它将以凭据对象的形式将其传递给 Home Assistant。

定义身份验证提供者

info

我们目前只支持内置的身份验证提供者。未来可能会支持自定义身份验证提供者。

身份验证提供者在 homeassistant/auth/providers/<provider名称>.py 中定义。身份验证提供者模块需要提供 AuthProvider 类和 LoginFlow 类的实现,后者用于向用户询问信息并根据 data_entry_flow 验证信息。

有关完整实现的身份验证提供者的示例,请参见 insecure_example.py

身份验证提供者应扩展 AuthProvider 类的以下方法。

方法必需描述
async def async_login_flow(self)返回一个实例,使用户可以进行身份识别的登录流程。
async def async_get_or_create_credentials(self, flow_result)根据登录流程的结果,返回一个凭据对象。这可以是一个现有的凭据或一个新的凭据。
async def async_user_meta_for_credentials(credentials)回调,当 Home Assistant 将从凭据对象创建用户时被调用。可用于填充用户的额外字段。

身份验证提供者应扩展 LoginFlow 类的以下方法。

方法必需描述
async def async_step_init(self, user_input=None)处理登录表单,更多细节见下文。

LoginFlow 的 async_step_init

info

我们可能会在不久的将来更改此接口。

LoginFlow 继承自 data_entry_flow.FlowHandler。数据输入流程的第一步被硬编码为 init,因此每个流程都必须实现 async_step_init 方法。async_step_init 的模式类似于以下伪代码:

async def async_step_init(self, user_input=None):
if user_input is None:
return self.async_show_form(
step_id="init", data_schema="构造 UI 表单的一些模式"
)
if is_invalid(user_input):
return self.async_show_form(step_id="init", errors=errors)
return await self.async_finish(user_input)