在params中使用key

时间:2014-01-13 14:41:51

标签: ruby-on-rails ruby

我正在尝试通过本教程构建一个登录系统: 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])

我是否在会话密钥中使用了?

谢谢, 加仑!

2 个答案:

答案 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了吗? 希望它有所帮助