diff --git a/lib/authlogic_facebook_connect/session.rb b/lib/authlogic_facebook_connect/session.rb
index 4d60f9c..e2199ff 100644
--- a/lib/authlogic_facebook_connect/session.rb
+++ b/lib/authlogic_facebook_connect/session.rb
@@ -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.
- #
+ #
# * Default: true
# * Accepts: Boolean
def facebook_valid_user(value = nil)
@@ -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
+ #
+ #
+ # * Default: :facebook_session_key
+ # * Accepts: 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
#
# * Default: klass
@@ -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',
@@ -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
@@ -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
\ No newline at end of file
+end