Получение check_box для работы в форме Rails - PullRequest
0 голосов
/ 17 января 2011

Моя цель - использовать флажок в форме входа, чтобы пользователь мог оставаться в системе после закрытия браузера. Я использую этот код в форме входа для флажка (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

1 Ответ

0 голосов
/ 17 января 2011

Как выглядит остальной код вашей формы?

Я предполагаю, что: stay_signed_in хранится не в params[:session][:stay_signed_in], а скорее params[:something_else][:stay_signed_in] или просто params[:stay_signed_in]

Если вы работаете на локальном WEBrick, вы можете видеть параметры, которые публикуются с каждым запросом, что поможет вам убедиться, что вы получили правильный ключ параметра.

-EDIT-

Исходя из вашего последнего комментария, я бы рекомендовал использовать Devise для обработки вашей логики аутентификации.Он очень прост в реализации, полностью совместим с Rails 3 и включает в себя встроенный код для обработки сессий и напоминания о необходимости оставаться в системе.

Вероятно, вам не стоит тратить время так долго на простые сессиизапоминание проблемы, когда есть такой хороший доступный плагин, который легок, прочен, хорошо документирован и т. д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...