Skip to content

Commit

Permalink
add session key field
Browse files Browse the repository at this point in the history
  • Loading branch information
taweili committed Nov 25, 2009
1 parent 32ed69a commit a18bac2
Showing 1 changed file with 44 additions and 24 deletions.
68 changes: 44 additions & 24 deletions lib/authlogic_facebook_connect/session.rb
Expand Up @@ -11,13 +11,13 @@ module Config
# Should the user be saved with our without validations?
#
# The default behavior is to save the user without validations and then
# in an application specific interface ask for the additional user
# in an application specific interface ask for the additional user
# details to make the user valid as facebook just provides a facebook id.
#
# This is useful if you do want to turn on user validations, maybe if you
# just have facebook connect as an additional authentication solution and
# This is useful if you do want to turn on user validations, maybe if you
# just have facebook connect as an additional authentication solution and
# you already have valid users.
#
#
# * <tt>Default:</tt> true
# * <tt>Accepts:</tt> Boolean
def facebook_valid_user(value = nil)
Expand All @@ -38,6 +38,16 @@ def facebook_uid_field(value = nil)
end
alias_method :facebook_uid_field=, :facebook_uid_field

# What session key field should be used for the facebook session key
#
#
# * <tt>Default:</tt> :facebook_session_key
# * <tt>Accepts:</tt> Symbol
def facebook_session_key_field(value = nil)
rw_config(:facebook_session_key_field, value, :facebook_session_key)
end
alias_method :facebook_session_key_field=, :facebook_session_key_field

# Class representing facebook users we want to authenticate against
#
# * <tt>Default:</tt> klass
Expand Down Expand Up @@ -75,24 +85,30 @@ def credentials=(value)

def validate_by_facebook_connect
facebook_session = controller.facebook_session
self.attempted_record = facebook_user_class.find(:first, :conditions => { facebook_uid_field => facebook_session.user.uid }).try(:"#{klass}".to_s.underscore)
self.attempted_record = facebook_user_class.find(:first, :conditions => { facebook_uid_field => facebook_session.user.uid })

if self.attempted_record
self.attempted_record.send(:"#{facebook_session_key_field}=", facebook_session.session_key)
self.attempted_record.save
end

unless self.attempted_record || facebook_skip_new_user_creation
begin
# Get the user from facebook and create a local user.
#
# We assign it after the call to new in case the attribute is protected.
new_user = klass.new

if klass == facebook_user_class
new_user.send(:"#{facebook_uid_field}=", facebook_session.user.uid)
new_user.send(:"#{facebook_session_key_field}=", facebook_session.session_key)
else
new_user.send(:"build_#{facebook_user_class.to_s.underscore}", :"#{facebook_uid_field}" => facebook_session.user.uid)
new_user.send(:"build_#{facebook_user_class.to_s.underscore}", :"#{facebook_uid_field}" => facebook_session.user.uid, :"#{facebook_session_key_field}" => facebook_session.session_key)
end

new_user.before_connect(facebook_session) if new_user.respond_to?(:before_connect)

self.attempted_record = new_user

if facebook_valid_user
errors.add_to_base(
I18n.t('error_messages.facebook_user_creation_failed',
Expand All @@ -104,7 +120,7 @@ def validate_by_facebook_connect
self.attempted_record.save_with_validation(false)
end
rescue Facebooker::Session::SessionExpired
errors.add_to_base(I18n.t('error_messages.facebooker_session_expired',
errors.add_to_base(I18n.t('error_messages.facebooker_session_expired',
:default => "Your Facebook Connect session has expired, please reconnect."))
end
end
Expand All @@ -116,21 +132,25 @@ def authenticating_with_facebook_connect?
end

private
def facebook_valid_user
self.class.facebook_valid_user
end
def facebook_uid_field
self.class.facebook_uid_field
end
def facebook_valid_user
self.class.facebook_valid_user
end

def facebook_uid_field
self.class.facebook_uid_field
end

def facebook_user_class
self.class.facebook_user_class
end
def facebook_session_key_field
self.class.facebook_session_key_field
end

def facebook_skip_new_user_creation
self.class.facebook_skip_new_user_creation
end
def facebook_user_class
self.class.facebook_user_class
end

def facebook_skip_new_user_creation
self.class.facebook_skip_new_user_creation
end
end
end
end
end

0 comments on commit a18bac2

Please sign in to comment.