我注意到这个问题很老而且没有答案,我也在做类似的事情,所以我会分享我的两分钱。希望你现在已经解决了这个问题。
您的用户管理系统应仅在完成整个登录过程后才提供会话密钥,这意味着您应仅在用户通过所有步骤提供所有身份验证数据后才允许用户进入。
- 接收用户名和密码
- 检查凭据和身份验证选项
- 如果凭据正常且未启用 Google 身份验证,请给他会话密钥,否则重试
- 如果凭据正常并且启用了 Google 身份验证,则将 $_POST['user'] 传递给质询表单
- 如果 TOTP 密码匹配服务器端检查,则返回会话密钥,否则重试
$_POST[] ----> loginCheck() ----> if(GAuth) ----> checkTotp() ----> sessionKey
| |
*---------------------------------*
loginCheck() 应该检查用户和密码是否正确,否则拒绝访问
if(GAuth) 应该返回 true 或 false,取决于您的用户是否使用 GAuth
checkTotp 应该是一种在客户端和服务器上检查 TOTP 密码的方法
sessionKey 应该是用来访问受保护内容的令牌,在服务器端和客户端存储一段时间
或者根据您的需要调整这个想法......在我看来,当他通过所有身份验证试验时,您应该接受系统中的用户。
您可以制作一个包含用户/密码和密码的用户表单,并一次处理所有数据并避免两页。
阅读更多关于https://www.rfc-editor.org/rfc/rfc6238