当用户检查记住我

时间:2015-11-06 08:26:19

标签: ruby-on-rails ruby-on-rails-4 devise auto-populate

如果用户在用户登录表单中选中了“记住我”复选框,则我需要自动填充要在登录表单中自动填充的电子邮件和密码。

由于我查看了一些文档和谷歌搜索,我得到了一些理解,这是浏览器的行为。并且是用户接受浏览器自动弹出窗口,用于让用户接受保存用户信息。

我开始知道该设计正在使浏览器将值存储在缓存中,并且即使浏览器关闭也要继续管理会话。

正如我必须努力的那样,你们中的任何一方都可以告诉我正确的道路,或者建议我实现这一目标。

1 个答案:

答案 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>