Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
65 lines (52 sloc) 2.57 KB
module AuthlogicConnect::Oauth::User
def self.included(base)
base.class_eval do
# add_acts_as_authentic_module makes sure it is
# only added to the user model, not all activerecord models.
add_acts_as_authentic_module(InstanceMethods, :prepend)
end
end
module InstanceMethods
include AuthlogicConnect::Oauth::Process
# Set up some simple validations
def self.included(base)
base.class_eval do
validate :validate_by_oauth, :if => :authenticating_with_oauth?
# need these validation options if you don't want it to choke
# on password length, which you don't need if you're using oauth
validates_length_of_password_field_options validates_length_of_password_field_options.merge(:if => :validate_password_with_oauth?)
validates_confirmation_of_password_field_options validates_confirmation_of_password_field_options.merge(:if => :validate_password_with_oauth?)
validates_length_of_password_confirmation_field_options validates_length_of_password_confirmation_field_options.merge(:if => :validate_password_with_oauth?)
validates_length_of_login_field_options validates_length_of_login_field_options.merge(:if => :validate_password_with_oauth?)
validates_format_of_login_field_options validates_format_of_login_field_options.merge(:if => :validate_password_with_oauth?)
end
end
# user adds a few extra things to this method from Process
# modules work like inheritance
def save_oauth_session
super
auth_session[:auth_attributes] = attributes.reject!{|k, v| v.blank? || !self.respond_to?(k)} unless is_auth_session?
end
def redirect_to_oauth
return has_token?(oauth_provider) ? false : super
end
def restore_attributes
# Restore any attributes which were saved before redirecting to the auth server
self.attributes = auth_session[:auth_attributes]
end
# single implementation method for oauth.
# this is called after we get the callback url and we are saving the user
# to the database.
# it is called by the validation chain.
def complete_oauth_transaction
token = token_class.new(oauth_token_and_secret)
old_token = token_class.find_by_key_or_token(token.key, token.token)
token = old_token if old_token
if has_token?(oauth_provider)
self.errors.add(:tokens, "you have already created an account using your #{token_class.service_name} account, so it")
else
self.access_tokens << token
end
end
end
end