filemaker データベース (ginjo-rfm gem を使用) に基づいて、単純なユーザー認証をアプリケーションに含めようとしています。Ryan Bates のAuthentication from Scratchからいくつかのアイデアを得た後、カスタマイズしたバージョンを作成しましたが、いくつかの問題が発生しました。
ログインフォームを送信すると、
User:Class の未定義メソッド `find_by_username'
find_by_username メソッドは、'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
sessions_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
)。