Моя цель - использовать флажок в форме входа, чтобы пользователь мог оставаться в системе после закрытия браузера. Я использую этот код в форме входа для флажка (views> session> new.html.erb):
<div class="field">
<%= f.check_box :stay_signed_in %> Stay signed in?
</div>
: следовательно, stay_signed_in равен 1, если отмечен, и 0, если нет. Затем я (пытаюсь) установить переменную сеанса: staysignedin в true или false в зависимости от значения: stay_signed_in (в контроллере сеансов):
def create
session[:staysignedin] = (params[:session][:stay_signed_in] == "1") ? true : false
...
end
Что-то не так с этим кодом. Даже если флажок установлен и значение: stay_signed_in определенно равно 1, для сеанса [: staysignedin] никогда не устанавливается значение true. Куда я иду не так?
Edit:
Остальная часть формы входа выглядит так:
<%= 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 %>
Редактировать: коррекция: он устанавливает сессию [: staysignedin] на значение true или false, поэтому ошибка должна быть в другом месте. Проблема заключается в том, что с установленным флажком «оставаться в системе», когда я закрываю браузер и снова открываю его, пользователь еще не вошел в систему. Когда я удаляю «оставаться в системе?» Флажок на форме входа и все соответствующие коды, оставляя только постоянный код входа, работает нормально.
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