2012-02-15 88 views
2

我有以下形式放置在页面上通过AJAX(jQuery的AJAX是否有帮助):为什么这个表单不会提示浏览器提供保存密码?

 <div id="login"> 
      <iframe src="/api/core/authSystem/authUser.php" id="temp" name="temp" style="display:none"></iframe> 
      <form id="loginForm" target="temp" onSubmit="App.Auth.login(); return false;"> 
       Email: <input type="text" name="email" id="email" onkeydown='if(event.keyCode == 13){ this.submit; }' /><br /> 
       Password: <input type="password" name="password" id="password" onkeydown='if(event.keyCode == 13){ this.submit; }' /><br /> 
       <div class="errorMsg" id="loginError"></div> 
       <div class="loginHelp l"><a href="#">Cant access your account?</a></div> 
       <input class="button rounded r" type="submit" id="loginButton" value="Log In" /> 
      </form> 
     </div> 

This Question提出的建议,我加了iframe和我指定目标。但是,浏览器仍不会提示用户保存密码。任何想法为什么?

编辑:我刚才注意到,Firefox会询问保存密码,但不会真正把它放入形式,一旦你返回到登录页面。

+0

其实我发现了一些可以帮助你的东西:http://www.howtogeek.com/62980/how-to-force-your-browser-to-remember-passwords/ – ParPar 2012-02-16 07:53:57

+0

似乎提交给iframe不再适用最近的浏览器。我还没找到其他方法。 http://dev.vaadin.com/ticket/8405 – Oliv 2012-05-09 07:30:29

+0

你最终找到解决方案吗? – denislexic 2012-09-15 11:02:01

回答

0

您可以尝试“双提交”技术。

简而言之:首先提交取消它,但在成功验证后再次触发它,并且不取消它。

更详细:

你需要重写你的表格是这样的:

<form id="loginForm" onSubmit="return App.Auth.login();" method="POST" action="/back-redirector">

/back-redirector只是重定向回到同一页面或主页。我正在重定向回到同一页面。

而且你App.Auth.login()功能如果要在第一次调用已导致成功的登录return false当它被称为第一次,return true

像这样:

letTheLoginFormDoTheSubmit = false; 
// flag to show that login was successful 
// and we need to trigger password save prompt. 

login: function() { 
    if (letTheLoginFormDoTheSubmit) { 
     return true; 
    } 
    // Do the login 
    // Start ajax 
    ajax(login, password, function() { 
     // This function is called when AJAX has completed 
     if (loginIsGood) { 
      letTheLoginFormDoTheSubmit = true; 
      loginForm.submit(); // trigger submit again 
     }); 
    return false; 
} 

所以会发生什么?

  1. 当您的登录功能在第一次启动登录序列时调用,并返回false以停止通常的表单提交。
  2. 登录功能接收数据,如果登录状态良好将其保存在浏览器端,则会提示“全部正常,触发密码保存提示”并重新提交表单。
  3. 但是因为国旗正在飞行登录功能不再做登录它只是让浏览器做表格提交正常,这会触发密码保存提示。

表单正被提交到URL重定向浏览器,并且没有做任何工作。

一些注意事项:

  • 页面将重新加载,所以保存您的身份验证cookie的不知何故在本地,或让重定向知道这是它,所以重定向器就可以将其重定向。
  • 所有表格数据可能会经过第二次提交。为了避免这种情况,从表单中删除相关字段,或删除名称属性。
  • 服务器端需要重定向器。

但总的来说,这不是对登录过程的重大改变,应该在每个浏览器中触发密码保存提示。

+0

看起来像一个不错的主意,但我开始思考,它+1往返和第二个自动和同步张贴表单。我认为用户会看到相同的正常登录行为。那么为什么需要在第一个地方登录ajax,如果我们可以在第一个登录时进行第二个同步登录。 – CallMeLaNN 2012-10-22 03:52:09

相关问题