我正在尝试通过本教程构建一个登录系统: http://www.youtube.com/watch?v=h0k6DFIStFY
我的表单如下:
<!DOCTYPE html>
<div id="content">
<%= flash[:alert1] %>
<%= form_for(:sessions, :url => sessions_path , :html => {:id => "login-form"}) do |f| %>
<fieldset>
<p>
<%= label_tag :name ,"Username:" %>
<%= text_field_tag :name, params[:name] , :class => "round full-width-input", :autofocus=>true %>
</p>
<p>
<%= label_tag :password, "Password:" %>
<%= password_field_tag :password, params[:password], :class => "round full-width-input" %>
</p>
<%= submit_tag "Login", :class=> "button round blue image-right ic-right-arrow" %>
</fieldset>
<% if (flash[:status] == FALSE) %>
<br/><div class="information-box round"><%= flash[:alert] %></div>
<% end %>
<% end %>
</div> <!-- end content -->
我的控制器看起来像这样:
class SessionsController < ApplicationController
def login
end
def create
user = User.authenticated?(params[:sessions][:name], params[:sessions][:password])
flash[:alert1] = "dummy"
if user
redirect_to '/login'
else
flash[:status] = FALSE
flash[:alert] = "Invalid username and password"
redirect_to '/login'
end
end
def new
end
end
尝试提交时,我收到此错误: 未定义的方法`[]'为nil:NilClass 在以下行中: user = User.authenticated?(params [:session] [:name],params [:session] [:password])
我是否在会话密钥中使用了?
谢谢, 加仑!
答案 0 :(得分:0)
看起来你正在使用外部身份验证gem,也许就是其中之一? https://www.ruby-toolbox.com/categories/rails_authentication
您需要在顶部添加require <gem_name>
行。
答案 1 :(得分:0)
我认为您的表单中存在一些问题:您使用的是form_for,然后是使用text_field_tag的字段。 我会纠正它:
<% form_for sessions .... do |f| %>
<%= f.text_field :name %>
等等。 这将在您的控制器中生成您想要的参数
params[:sessions][:name]
params[:sessions][:password]
我建议你使用一些gem而不是构建一个完整的身份验证系统,这在安全性方面可能非常棘手。你看过https://github.com/plataformatec/devise了吗? 希望它有所帮助