我正在尝试使用AuthLogic在我的User表中设置一个简单的登录。每次我尝试,登录失败,我不知道为什么。我确信这是一个简单的错误,但我已经用它打了一段砖墙。
#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实现了Jakub Hampl的建议 - 我收到了一个新错误。
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?
答案 0 :(得分:1)
如果可能的话,最好使用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| %>
。
答案 1 :(得分:1)
在您的情况下,params [:user_session]为空,因为它未在您的视图中设置。我认为Jakub Hampl建议使用form_for是最好的方法,但您也可以通过将输入名称设置为user_session[login]
和user_session[password]
来使用form_tag,或者您可以将操作中的行更改为{{1 }}