'Login'表单不访问用户数据库



我正在尝试为我的应用程序构建一个非常简单的用户身份验证。我认为问题在于"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处理#创建为HTML参数:{"utf8"=>"✓","authenticity_token"=>"WNJziVL/xhAeGdsjNANi6LWlDrAMIGKm2kDWmsVLfxMh6fCwG1LoRWG09wgsn2z3rIZkreODkHZ0GJeYFCW3yQ==","sessions"=>{"username"=>"crackerjack540","password"=>"[FILTERED]"},"commit"=>"Login"}用户负载(0.2ms)选择"用户"。*从"用户"到"用户"的位置。"username"为NULL LIMIT 1已重定向至http://localhost:3000/login完成302在2ms内找到(活动记录:0.2ms)

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

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

你应该这样做:

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

此外,在下文中,要访问密码:

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

希望这能有所帮助!

最新更新