如果用户在用户登录表单中选中了“记住我”复选框,则我需要自动填充要在登录表单中自动填充的电子邮件和密码。
由于我查看了一些文档和谷歌搜索,我得到了一些理解,这是浏览器的行为。并且是用户接受浏览器自动弹出窗口,用于让用户接受保存用户信息。
我开始知道该设计正在使浏览器将值存储在缓存中,并且即使浏览器关闭也要继续管理会话。
正如我必须努力的那样,你们中的任何一方都可以告诉我正确的道路,或者建议我实现这一目标。
答案 0 :(得分:0)
通常使用用户名和密码字段我们都记得我:
<%= label_tag :remember_me %>
<%= check_box_tag :remember_me, 1, params[:remember_me] %>
<%= submit_tag "Log in" %>
如果我们调用登录操作,当用户点击提交按钮时,通常看起来像这样:
def login
user = User.find_by_email(params[:username])
if user && user.authenticate(params[:password])
if params[:remember_me]
cookies.permanent[:auth_token] = user.auth_token
else
cookies[:auth_token] = user.auth_token
end
redirect_to root_url, :notice => "Logged in!"
else
flash.now.alert = "Invalid email or password"
render "new"
end
end
现在,您的用户希望自动填充用户名和密码,而不是自动登录。然后我认为你不应该永久地将令牌保存到这样的cookie:cookies.permanent[:auth_token] = user.auth_token
而不是像cookies[:auth_token] = user.auth_token
那样。并让浏览器自动填写登录表单。
def login
user = User.find_by_email(params[:username])
if user && user.authenticate(params[:password])
if params[:remember_me]
cookies[:auth_token] = user.auth_token
else
cookies[:auth_token] = user.auth_token
end
redirect_to root_url, :notice => "Logged in!"
else
flash.now.alert = "Invalid email or password"
render "new"
end
end
如果您不想将它放在浏览器的手上,那么您可以执行以下操作,但我不认为您应该这样做:
<%= form_tag sessions_path do %>
<div class="field">
<%= label_tag :email %>
<%= text_field_tag :email, @user.email %>
</div>
<div class="field">
<%= label_tag :password %>
<%= password_field_tag @user.password %>
</div>
<div class="field">
<%= label_tag :remember_me %>
<%= check_box_tag :remember_me, 1,remember_me %>
</div>
<div class="actions"><%= submit_tag "Log in" %></div>