I’m using Authlogic with Rails 3.0 and I’m having an issue where my
users
can’t login. I have a customer model and a user model and in production
my
customer login works, but my user login doesn’t (in development both
work
fine). Someone please help, users generally frown upon not being able to
login.
What happens is that when user_sessions tries to save it fails.
Specifically, my Heroku logs say:
Started POST “user_sessions”
POST 应用宝官网-全网最新最热手机应用游戏下载
ArgumentError (invalid date)
config/initializers/american_date_monkey_patch.rb:11:in ‘to_date’
config/initializers/american_date_monkey_patch.rb:17:in
‘fallback_string_to_date’
app/controllers/user_sessions_controller.rb:in ‘create’
american_date_monkey_patch.rb
if RUBY_VERSION >= ‘1.9’
class String
def to_date
if self.blank?
nil
elsif self =~ /(\d{1,2})/(\d{1,2})/(\d{4})/
::Date.civil($3.to_i, $1.to_i, $2.to_i)
else
::Date.new(*::Date._parse(self, false).values_at(:year, :mon,
:mday))
end
end
end
class ActiveRecord::ConnectionAdapters::Column
def self.fallback_string_to_date(string)
string.to_date
end
end
end
user_sessions model
class UserSession < Authlogic::Session::Base
def to_key
new_record? ? nil : [ self.send(self.class.primary_key) ]
end
def persisted?
false
end
end
customer_sessions model (same as above with a different class name)
class CustomerSession < Authlogic::Session::Base
def to_key
new_record? ? nil : [ self.send(self.class.primary_key) ]
end
def persisted?
false
end
end
user_sessions controller
class UserSessionsController < ApplicationController
before_filter :require_no_user, :only => [:new, :create]
before_filter :require_user, :only => :destroy
def new
@user_session = UserSession.new
end
def create
@user_session = UserSession.new(params[:user_session])
if @user_session.save
flash[:notice] = “Login successful!”
redirect_back_or_default community_path
else
render :action => :new
end
end
def destroy
current_user_session.destroy
flash[:notice] = “Logout user successful!”
redirect_back_or_default community_path
end
end
Customer Sessions controller (similar but not identical)
class CustomerSessionsController < ApplicationController
def new
@customer_session = CustomerSession.new
end
def create
@customer_session = CustomerSession.new(params[:customer_session])
if @customer_session.save
flash[:notice] = “Login successful!”
redirect_back_or_default admins_path
else
render :action => :new
end
end
def destroy
current_customer_session.destroy
flash[:notice] = “Logout customer successful!”
redirect_back_or_default admins_path
end
end