我正在尝试基于 filemaker 数据库(使用 ginjo-rfm gem)在我的应用程序中包含一个简单的用户身份验证。从 Ryan Bates 的Authentication from Scratch中获得一些想法后,我编写了它的自定义版本,但遇到了一些问题。
当我提交登录表单时,我会看到
用户:类的未定义方法“find_by_username”
find_by_username 方法应该基于数据库中名为“用户名”的列,不是吗?
用户.rb
class User < Rfm::Base
include ActiveModel::SecurePassword
include ActiveModel::MassAssignmentSecurity
include ActiveModel::SecurePassword
has_secure_password
attr_accessible :username, :password
config :layout => 'web__SupplierContacts'
def self.authenticate(username, password)
user = find_by_username(username)
if user && user.password_hash == BCrypt::Engine.hash_secret(password, user.password_salt)
user
else
nil
end
end
end
session_controller.rb
class SessionsController < ApplicationController
def new
end
def create
user = User.authenticate(params[:username], params[:password])
if user && user.authenticate(params[:password])
session[:user_id] = user.id
redirect_to root_url, notice: "Logged in!"
else
flash.now.alert = "Email or password is invalid"
render "new"
end
end
def destroy
session[:user_id] = nil
redirect_to root_url, notice: "Logged out!"
end
end
我猜这是我的模型继承自 Rfm::Base 的问题,但我不确定。有任何想法吗?
想法:
有没有办法改写Class.find_by_column
声明?我也做不到User.where(:username => "username usernamerson"
(返回undefined method 'where' for User:Class
)。