2

在常规电子邮件/密码表单的场景中,提交的表单向服务器发出 POST 请求以验证客户端凭据。

如何告诉浏览器认证是否成功?即,如何告诉浏览器是否记住电子邮件/密码组合。

这是表单布局:

<form action="" method="post">
    <fieldset>
        <legend>Sign in</legend>

        <label>
            <span>Email</span>
            <input type="text" name="ay[email]">
        </label>

        <label>
            <span>Password</span>
            <input type="password" name="ay[password]">
        </label>
        <input type="submit" value="Sign in">
    </fieldset>
</form>

该过程不涉及 JavaScript。

4

3 回答 3

0

如果您正在执行form提交操作来验证会话,浏览器将询问用户是否要记住该username/password组合。浏览器还将检查用户添加到浏览器中的任何异常情况,例如never remembernever remember for the site

于 2013-02-07T17:24:42.740 回答
0

Q:认证成功与否 A:设置cookies。其次,您不能强制浏览器记住组合,您可以设置 cookie,您可以在其中使用时间,像 Google 一样需要多少年使用 :)

于 2013-02-07T17:57:03.570 回答
0

解决此问题的大多数尝试都涉及绕过浏览器启发式登录,这很容易出错并且很容易过时。所以,我们应该看看浏览器自己推荐什么来使用他们的身份验证功能。

遗憾的是,目前还没有跨浏览器标准(即将推出的isLoggedInAPI看起来就是那样),但与此同时,我们从Chromium Wiki 的 Create Amazing Password Forms中获得了一些建议:

确保表单提交清晰

密码管理员需要一些迹象表明表单已提交。尝试确保您的网页在提交表单时执行以下操作之一:

  • 执行到另一个页面的导航。
  • 使用 History.pushState 或 History.replaceState 模拟导航,并完全删除密码表单。

此外,如果您使用 XMLHttpRequest 或 fetch 执行异步请求,请确保在响应标头中正确设置成功状态。

遵循现有约定

仅仅为了它而与众不同是不值得的。这将导致全面的用户体验不佳。这意味着,例如,如果登录失败,则不会导航到单独的网页:这是意料之外的,并且会让用户和密码管理器迷失方向。

由此,我们可以向至少一个浏览器推断出登录失败的以下信号:

  • HTTP 响应的状态码是一个错误。

  • 表单提交不会导航到另一个页面(如果您未能成功登录,登录页面可能会重新加载,但至关重要的是它们保持在相同的 URL)。

  • 当用户尝试时,表单根本不提交——要么是因为 HTML 表单验证阻止了提交,要么是 JS 检查服务器是否接受了登录并调用.preventDefault了表单提交事件。(前者不适用于错误的凭据;仅适用于和 等基本检查requiredminlength

遗憾的是,我可以确认其中一些技术不能跨浏览器工作:例如,Firefox 在对表单提交的 HTTP 响应到达之前乐观地显示其保存凭据菜单。Mozilla 有一个关于这个确切问题的错误开放,但似乎做正确的事情来保持与现有网站的兼容性对他们来说同样棘手。

更令人沮丧的是,来自该错误的副本

Matthew N. [:MattN] • 2 年前

我们现在应该仔细检查其他浏览器如何处理这个问题。我认为其他人现在开始在这方面抄袭我们。

于 2021-07-11T18:54:54.257 回答