我希望用户能够选择角色作为登录过程的一部分。在用户给出他的username
和password
之后,服务器会发回他所拥有的角色。在authProvider
的login
功能结束之前,如何实现用户可以从拥有的角色列表中选择角色的对话框?
login
函数是一个常规的JavaScript函数,而不是React函数组件,所以我不能从中调用钩子(如useContext
(。
我有两个猜测:
-
在
LoginForm
中,将async
回调函数传递给login
方法(由useLogin()
创建(。服务器在login
函数中用user
的roles
响应后,用await
调用此回调函数。在这个回调函数中,我可以使"选择角色"模式可见。我只是不明白,我如何才能实现程序等待,直到用户在"选择角色"模式中点击submit
按钮,然后才返回一个已解析的Promise。这在JS中可能吗? -
创建一个接受
username
和password
的"预登录"表单,将其发送到后端,后端返回角色,显示"选择角色"模式,并仅在用户提交角色时调用authProvider
login
函数。
我真的很好奇你对此的看法和想法。
useLogin
钩子返回的login
函数除了接受凭据之外,还接受第二个参数:redirectTo
。您可以提供一个自定义路由,该路由将显示一个用于选择角色的专用页面,或者如果您真的想要一个模态,则可以显示带有子路由的登录页面。
一旦用户选择了其角色,您就可以使用useRedirect
挂钩重定向到管理员主页。