【发布时间】:2011-01-17 15:18:19
【问题描述】:
我的目标是使用登录表单上的复选框来允许用户选择在浏览器关闭后保持登录状态。我在复选框的登录表单中使用此代码(视图 > 会话 > new.html.erb):
<div class="field">
<%= f.check_box :stay_signed_in %> Stay signed in?
</div>
:stay_signed_in 因此如果选中则为 1,否则为 0。然后我(尝试)根据 :stay_signed_in 的值(在会话控制器中)将会话变量 :staysignedin 设置为 true 或 false:
def create
session[:staysignedin] = (params[:session][:stay_signed_in] == "1") ? true : false
...
end
这段代码有问题。即使选中该框并且 :stay_signed_in 肯定为 1, session[:staysignedin] 也永远不会设置为 true。我哪里错了?
编辑: 登录表单的其余部分如下所示:
<%= form_for(:session, :url => sessions_path) do |f| %>
<div class="field">
<%= f.label :email %><br />
<%= f.text_field :email %>
</div>
<div class="field">
<%= f.label :password %><br />
<%= f.password_field :password %>
</div>
<div class="field">
<%= f.check_box :stay_signed_in %>
Stay signed in on this computer?
</div>
<div class="actions">
<%= f.submit "Sign in" %>
</div>
<% end %>
编辑:更正:它正在正确设置 session[:staysignedin] 为真或假,因此故障必须在其他地方。问题是选中“保持登录”后,当我关闭浏览器并重新打开它时,用户仍未登录。当我删除“保持登录?”时登录表单和所有相关代码上的复选框,只留下永久登录代码,它工作正常。
def sign_in(user)
if session[:staysignedin]
cookies.permanent.signed[:remember_token] = [user.id, user.salt]
else
session[:userid] = user.id
end
self.current_user = user
end
def sign_out
if session[:staysignedin]
cookies.delete(:remember_token)
else
session[:userid] = nil
session[:staysignedin] = nil
end
self.current_user = nil
end
【问题讨论】:
标签: ruby-on-rails