Проблемы с настройкой AuthLogic - PullRequest
2 голосов
/ 15 мая 2010

Я пытаюсь настроить простой вход в систему с помощью AuthLogic в моей таблице пользователей. Каждый раз, когда я пытаюсь войти в систему, происходит сбой, и я не знаю почему. Я уверен, что это простая ошибка, но я некоторое время бил ее по кирпичной стене.

#user_sessions_controller
def create
@user_session = UserSession.new(params[:user_session])
  if @user_session.save
    flash[:notice] = "Login successful!"
  else
    flash[:notice] = "We couldn't log you in. Please try again!"
    redirect_to :controller => "index", :action => "index"
  end
end

#_user_login.html.erb (this is the partial from my index page where Users log in)
<% form_tag user_session_path do %>
  <p><label for="login">Login:</label> 
<%= text_field_tag "login", nil, :class => "inputBox", :id => "login",
  </p>

  <p><label for="password">Password: </label>
<%= password_field_tag "password", nil, :class => "inputBox", :id => "password",
  </p>

  <p><%= submit_tag "submit", :class => "submit" %></p>
<% end %>

Я заставил Faker сгенерировать некоторые данные для моей пользовательской таблицы, но я не могу войти! Каждый раз, когда я пытаюсь это просто перенаправляет на индекс. Куда я иду не так? Спасибо всем.

------ UPDATE ------

Я реализовал предложение Якуба Хэмпла с form_for только сейчас - я получаю новую ошибку.

ActionView::TemplateError (called id for nil, which would mistakenly be 4 -
1: <% form_for @user_session do |f| %>
2: <% if flash[:notice] -%>
3: <p class="notice"><%= flash[:notice] %></p>
4: <% end -%>

app/views/index/_user_login.html.erb:1
app/views/layouts/index.html.erb:65
app/controllers/index_controller.rb:3:in `index'

Rendered rescues/_trace (86.0ms)
Rendered rescues/_request_and_response (1.0ms)
Rendering rescues/layout (internal_server_error)

Я вообще не менял контроллер. Спасибо всем, кто откликается на эту тему - это невероятно полезно для меня. Что я могу сделать сейчас, чтобы преодолеть это препятствие?

------ ОБНОВЛЕНИЕ № 2 ------

Вот мой контроллер приложения.

def current_user_session
  return @current_user_session if defined?(@current_user_session)
  @current_user_session = UserSession.find
end

def current_user
  return @current_user if defined?(@current_user)
  @current_user = current_user_session && current_user_session.user
end

def require_user
  unless current_user
store_location
flash[:notice] = "You must be logged in to access this page"
redirect_to login_path
return false
  end
end

def require_no_user
  if current_user
store_location
flash[:notice] = "You must be logged out to access this page"
redirect_to root_url
return false
  end
end

Какой из них следует изменить на @user_session?

Ответы [ 2 ]

1 голос
/ 15 мая 2010

в вашем случае params [: user_session] пуст, потому что он не установлен в вашем представлении. Я думаю, что предложение Якуба Хэмпла использовать form_for - лучший способ, но вы также можете остаться с form_tag, установив имена входов на user_session[login] и user_session[password], ИЛИ вы можете изменить строку в вашем действии на @user_session = UserSession.new(:login => params[:login], :password => params[:password]) .

1 голос
/ 15 мая 2010

Хорошей идеей является использование form_for, если возможно:

<% form_for @user_session do |f| %>
  <p>
    <%= f.label :username %>
    <%= f.text_field :username, :class => :inputBox %>
  </p>
  <p>
    <%= f.label :password %>
    <%= f.password_field :password, :class => :inputBox %>
  </p>
  <p><%= f.submit "submit", :class => :submit %></p>
<% end %>

Помимо этого, трудно сказать. Ваш файл журнала дает какие-либо детали (ака ошибки)? Также попробуйте добавить ошибки в таблицу, чтобы вы увидели, что происходит не так.

Поскольку для вашего последнего обновления @user_session не установлено, просто создайте его: <% form_for UserSession.new do |f| %>.

...