Доступны ли параметры формы помощникам в рельсах 3? - PullRequest
1 голос
/ 03 октября 2011

Я следовал руководству Майкла Хартла, чтобы создать форму регистрации с логином.Я подумал, что попытаюсь добавить флажок запомнить меня в форму входа в систему и установить его значение по умолчанию на 0, а затем на 1 при проверке.

Я добавил оператор if в сессионном хелпе:

module SessionsHelper

  def login(user)
    if params[:remember_me]
    cookies.permanent.signed[:remember_token] = [user.id, user.password_salt]
    current_user = user
   else
    cookies[:remember_token] = [user.id, user.password_salt]
    current_user = user
   end
  end

  def current_user=(user)
    @current_user = user
  end

  def current_user
    @current_user ||= user_from_remember_token
  end

  def logged_in?
    !current_user.nil?
  end

  def logout
    cookies.delete(:remember_token)
    current_user = nil
  end

  private

  def user_from_remember_token
    User.authenticate_with_salt(*remember_token)
  end

  def remember_token
    cookies.signed[:remember_token] || [nil, nil]
  end

end

.... но по какой-то причине, когда я вхожу в систему с флажком или не отмечен, время истечения срока действия cookie и дата никогда не устанавливаются.Когда я проверяю информацию о куки в Firefox, он всегда говорит «В конце сессии».Я что-то упустил?

мой контроллер:

class SessionsController < ApplicationController

  def new

  end


  def create
    user = User.authenticate(params[:session][:email], params[:session][:password])
    if user.nil?
      flash.now[:error] = "Invalid email password combination"
      render 'new'
    else
      login user
      redirect_to user
    end
  end

  def destroy
    logout
    redirect_to root_path
  end
end

просмотр:

<%= form_for(:session, :url => sessions_path) do |f| %>
  <%= f.text_field :email, :placeholder => "Email" %>      
  <%= f.password_field :password, :placeholder => "Password" %>     
  Remember me? <%= f.check_box :remember_me, :value => 1 %>
  <%= f.submit "Log in", :id => "login_submit" %>
  <% end %>

Помощь приветствуется.

Ответы [ 2 ]

1 голос
/ 03 октября 2011

Вам нужно использовать params[:session][:remember_me] вместо params[:remember_me]. Сравните это с линией аутентификации пользователя вашего контроллера.

0 голосов
/ 03 октября 2011

Следующее решило мою проблему

 def login(user)
    if params[:session][:remember_me] == "1"
    cookies.permanent.signed[:remember_token] = [user.id, user.password_salt]
    current_user = user
   elsif params[:session][:remember_me] == "0"
    cookies.signed[:remember_token] = [user.id, user.password_salt]
    current_user = user
   end
  end

вид:

    <%= form_for(:session, :url => sessions_path) do |f| %>
      <%= f.text_field :email, :placeholder => "Email" %>      
      <%= f.password_field :password, :placeholder => "Password" %>     
      Remember me? <%= f.check_box :remember_me %>
      <%= f.submit "Log in", :id => "login_submit" %>
      <% end %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...