“登录”表单无法访问用户数据库

时间:2016-06-02 04:29:36

标签: ruby-on-rails forms authentication

我正在尝试为我的应用程序构建一个非常简单的用户身份验证。我认为问题是'login'表单没有指向:user数据库。当我创建一个新用户时,我将其设置为自动登录。该函数效果很好,但是当我在登录表单中登录同一个用户时,它返回错误“username is NULL LIMIT 1.我使用的是Rails 4.2.5。当我进入rails控制台时,我可以看到用户仍然存在。

我为可怕的编码习惯提前道歉,我主要是在教自己。提前感谢您的帮助。

会话控制器:

class SessionsController < ApplicationController

   def new

    end

   def create

    user = User.find_by_username(params[:username])

    if user && user.authenticate(params[:username][:password])

      session[:user_id] = user.id

      redirect_to root_path, notice: "You are now logged in."

    else 

      redirect_to '/login', notice: "incorrect email or password! "

    end

   end

    def destroy

      session[:user_id] = nil

      redirect_to root_path, notice: "logged out."

    end

end

用户模型

class User < ActiveRecord::Base
 has_secure_password
 validates_uniqueness_of :username, :email
 validates :password, length: {minimum: 6}, allow_blank: true
 has_many :messages
end

登录表格

<div class="login">
<%= simple_form_for :sessions do |f| %>
  <%= f.input :username %>
  <%= f.input :password %>
  <%= f.button :submit, "Login" %>
<% end %>
</div>

当我尝试登录时,终端返回:

  

在2016-06-02 00:02:15 -0400开始了127.0.0.1的POST“/ login”   由SessionsController处理#create as HTML     参数:{“utf8”=&gt;“✓”,“authenticity_token”=&gt;“WNJziVL / xhAeGdsjNANi6LWlDrAMIGKm2kDWmsVLfxMh6fCwG1LoRWG09wgsn2z3rIZkreODkHZ0GJeYFCW3yQ ==”,“sessions”=&gt; {“username”=&gt;“crackerjack540”,“password”=&gt; “[FILTERED]”},“commit”=&gt;“登录”}     用户负载(0.2ms)SELECT“users”。* FROM“users”WHERE“users”。“username”IS NULL LIMIT 1   重定向到http://localhost:3000/login   完成302发现在2ms(ActiveRecord:0.2ms)

1 个答案:

答案 0 :(得分:1)

用户名在会话对象中,因此不是:

user = User.find_by_username(params[:username])

你应该这样做:

user = User.find_by_username(params[:sessions][:username])

另外,下面,访问密码:

user.authenticate(params[:sessions][:password])

希望这有帮助!