authlogic-connect 0.0.3.4 → 0.0.3.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.markdown +156 -43
- data/Rakefile +1 -1
- data/lib/authlogic-connect.rb +2 -71
- data/lib/authlogic_connect/authlogic_connect.rb +46 -0
- data/lib/authlogic_connect/callback_filter.rb +1 -1
- data/lib/authlogic_connect/common.rb +1 -1
- data/lib/authlogic_connect/common/state.rb +16 -0
- data/lib/authlogic_connect/common/user.rb +102 -34
- data/lib/authlogic_connect/common/variables.rb +68 -16
- data/lib/authlogic_connect/engine.rb +0 -1
- data/lib/authlogic_connect/{common/ext.rb → ext.rb} +1 -0
- data/lib/authlogic_connect/oauth.rb +3 -1
- data/lib/authlogic_connect/oauth/helper.rb +17 -13
- data/lib/authlogic_connect/oauth/process.rb +61 -76
- data/lib/authlogic_connect/oauth/session.rb +3 -14
- data/lib/authlogic_connect/oauth/state.rb +54 -0
- data/lib/authlogic_connect/oauth/tokens/google_token.rb +9 -1
- data/lib/authlogic_connect/oauth/tokens/oauth_token.rb +67 -2
- data/lib/authlogic_connect/oauth/tokens/twitter_token.rb +2 -0
- data/lib/authlogic_connect/oauth/user.rb +57 -74
- data/lib/authlogic_connect/oauth/variables.rb +52 -27
- data/lib/authlogic_connect/openid.rb +3 -0
- data/lib/authlogic_connect/openid/process.rb +30 -0
- data/lib/authlogic_connect/openid/session.rb +6 -53
- data/lib/authlogic_connect/openid/state.rb +47 -0
- data/lib/authlogic_connect/openid/tokens/my_openid_token.rb +3 -0
- data/lib/authlogic_connect/openid/tokens/openid_token.rb +6 -0
- data/lib/authlogic_connect/openid/user.rb +38 -68
- data/lib/authlogic_connect/openid/variables.rb +17 -3
- data/lib/authlogic_connect/token.rb +0 -1
- data/lib/open_id_authentication.rb +0 -1
- data/rails/init.rb +1 -1
- data/test/controllers/test_users_controller.rb +21 -0
- data/test/libs/database.rb +48 -0
- data/test/libs/user.rb +3 -0
- data/test/libs/user_session.rb +2 -0
- data/test/old.rb +53 -0
- data/test/test_authlogic_connect.rb +1 -1
- data/test/test_helper.rb +142 -42
- data/test/test_user.rb +255 -0
- metadata +15 -4
@@ -1,85 +1,68 @@
|
|
1
|
-
module AuthlogicConnect::Oauth
|
2
|
-
|
1
|
+
module AuthlogicConnect::Oauth::User
|
2
|
+
|
3
|
+
def self.included(base)
|
4
|
+
base.class_eval do
|
5
|
+
# add_acts_as_authentic_module makes sure it is
|
6
|
+
# only added to the user model, not all activerecord models.
|
7
|
+
add_acts_as_authentic_module(InstanceMethods, :prepend)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
module InstanceMethods
|
12
|
+
include AuthlogicConnect::Oauth::Process
|
13
|
+
|
14
|
+
# Set up some simple validations
|
3
15
|
def self.included(base)
|
4
16
|
base.class_eval do
|
5
|
-
|
17
|
+
|
18
|
+
validate :validate_by_oauth, :if => :authenticating_with_oauth?
|
19
|
+
|
20
|
+
# need these validation options if you don't want it to choke
|
21
|
+
# on password length, which you don't need if you're using oauth
|
22
|
+
validates_length_of_password_field_options validates_length_of_password_field_options.merge(:if => :validate_password_with_oauth?)
|
23
|
+
validates_confirmation_of_password_field_options validates_confirmation_of_password_field_options.merge(:if => :validate_password_with_oauth?)
|
24
|
+
validates_length_of_password_confirmation_field_options validates_length_of_password_confirmation_field_options.merge(:if => :validate_password_with_oauth?)
|
25
|
+
validates_length_of_login_field_options validates_length_of_login_field_options.merge(:if => :validate_password_with_oauth?)
|
26
|
+
validates_format_of_login_field_options validates_format_of_login_field_options.merge(:if => :validate_password_with_oauth?)
|
6
27
|
end
|
28
|
+
|
29
|
+
# email needs to be optional for oauth
|
30
|
+
base.validate_email_field = false
|
31
|
+
end
|
32
|
+
|
33
|
+
# user adds a few extra things to this method from Process
|
34
|
+
# modules work like inheritance
|
35
|
+
def save_oauth_session
|
36
|
+
super
|
37
|
+
auth_session[:auth_attributes] = attributes.reject!{|k, v| v.blank?} unless is_auth_session?
|
7
38
|
end
|
8
39
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
base.class_eval do
|
14
|
-
has_many :tokens, :class_name => "Token", :dependent => :destroy
|
15
|
-
belongs_to :active_token, :class_name => "Token", :dependent => :destroy
|
16
|
-
accepts_nested_attributes_for :tokens, :active_token
|
17
|
-
|
18
|
-
validate :validate_by_oauth, :if => :authenticating_with_oauth?
|
19
|
-
|
20
|
-
# need these validation options if you don't want it to choke
|
21
|
-
# on password length, which you don't need if you're using oauth
|
22
|
-
validates_length_of_password_field_options validates_length_of_password_field_options.merge(:if => :validate_password_with_oauth?)
|
23
|
-
validates_confirmation_of_password_field_options validates_confirmation_of_password_field_options.merge(:if => :validate_password_with_oauth?)
|
24
|
-
validates_length_of_password_confirmation_field_options validates_length_of_password_confirmation_field_options.merge(:if => :validate_password_with_oauth?)
|
25
|
-
validates_length_of_login_field_options validates_length_of_login_field_options.merge(:if => :validate_password_with_oauth?)
|
26
|
-
validates_format_of_login_field_options validates_format_of_login_field_options.merge(:if => :validate_password_with_oauth?)
|
27
|
-
end
|
28
|
-
|
29
|
-
# email needs to be optional for oauth
|
30
|
-
base.validate_email_field = false
|
31
|
-
end
|
32
|
-
|
33
|
-
def update_attributes(attributes, &block)
|
34
|
-
self.attributes = attributes
|
35
|
-
save(true, &block)
|
36
|
-
end
|
37
|
-
|
38
|
-
# NEED TO GIVE A BLOCK
|
39
|
-
def save_with_oauth(perform_validation = true, &block)
|
40
|
-
if perform_validation && block_given? && redirecting_to_oauth_server?
|
41
|
-
# Save attributes so they aren't lost during the authentication with the oauth server
|
42
|
-
auth_session[:authlogic_oauth_attributes] = attributes.reject!{|k, v| v.blank?}
|
43
|
-
redirect_to_oauth
|
44
|
-
return false
|
45
|
-
end
|
46
|
-
return true
|
47
|
-
end
|
48
|
-
|
49
|
-
protected
|
40
|
+
def restore_attributes
|
41
|
+
# Restore any attributes which were saved before redirecting to the auth server
|
42
|
+
self.attributes = auth_session[:auth_attributes]
|
43
|
+
end
|
50
44
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
45
|
+
# single implementation method for oauth.
|
46
|
+
# this is called after we get the callback url and we are saving the user
|
47
|
+
# to the database.
|
48
|
+
# it is called by the validation chain.
|
49
|
+
def complete_oauth_transaction
|
50
|
+
unless create_oauth_token
|
51
|
+
self.errors.add(:tokens, "you have already created an account using your #{oauth_token.service_name} account, so it")
|
57
52
|
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def create_oauth_token
|
56
|
+
token = token_class.new(oauth_token_and_secret)
|
58
57
|
|
59
|
-
|
60
|
-
return false
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
return initial_request || initial_response
|
67
|
-
end
|
68
|
-
|
69
|
-
def authenticate_with_oauth
|
70
|
-
# Restore any attributes which were saved before redirecting to the oauth server
|
71
|
-
self.attributes = auth_session.delete(:authlogic_oauth_attributes)
|
72
|
-
token = AuthlogicConnect.token(oauth_provider).new(oauth_key_and_secret)
|
73
|
-
puts "NEW TOKEN: #{token.inspect}"
|
74
|
-
if old_token = Token.find_by_key(token.key)
|
75
|
-
puts "OLD TOKEN? #{old_token.inspect}"
|
76
|
-
self.errors.add("you have already created an account using your #{oauth_token.service_name} account, so it")
|
77
|
-
else
|
78
|
-
self.tokens << token
|
79
|
-
self.active_token = token
|
80
|
-
end
|
58
|
+
if has_token?(oauth_provider) || Token.find_by_key(token.key) || Token.find_by_token(token.token)
|
59
|
+
return false
|
60
|
+
else
|
61
|
+
self.tokens << token
|
62
|
+
self.active_token = token
|
63
|
+
return true
|
81
64
|
end
|
82
|
-
|
83
65
|
end
|
66
|
+
|
84
67
|
end
|
85
|
-
end
|
68
|
+
end
|
@@ -1,30 +1,55 @@
|
|
1
|
-
module AuthlogicConnect::Oauth
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
def oauth_key
|
10
|
-
return nil unless auth_controller
|
11
|
-
oauth_version == 1.0 ? auth_params[:oauth_token] : auth_params[:code]
|
12
|
-
end
|
13
|
-
|
14
|
-
def oauth_version
|
15
|
-
oauth_token.oauth_version
|
16
|
-
end
|
17
|
-
|
18
|
-
def oauth_provider
|
19
|
-
auth_session[:oauth_provider] || "facebook"
|
20
|
-
end
|
21
|
-
|
22
|
-
def oauth_consumer
|
23
|
-
oauth_token.consumer
|
24
|
-
end
|
1
|
+
module AuthlogicConnect::Oauth::Variables
|
2
|
+
include AuthlogicConnect::Oauth::State
|
3
|
+
|
4
|
+
# this doesn't do anything yet, just to show what variables
|
5
|
+
# we need from the form
|
6
|
+
def oauth_variables
|
7
|
+
[:oauth_provider]
|
8
|
+
end
|
25
9
|
|
26
|
-
|
27
|
-
|
28
|
-
|
10
|
+
# this comes straight from either the params or session.
|
11
|
+
# it is required for most of the other accessors in here
|
12
|
+
def oauth_provider
|
13
|
+
from_session_or_params(:oauth_provider)
|
14
|
+
end
|
15
|
+
|
16
|
+
# next is "token_class", which is found from the oauth_provider key.
|
17
|
+
# it is the OauthToken subclass, such as TwitterToken, which we
|
18
|
+
# use as the api for accessing oauth and saving the response to the database for a user.
|
19
|
+
def token_class
|
20
|
+
AuthlogicConnect.token(oauth_provider) unless oauth_provider.blank?
|
21
|
+
end
|
22
|
+
|
23
|
+
# This should go...
|
24
|
+
def oauth_response
|
25
|
+
auth_params && oauth_token
|
26
|
+
end
|
27
|
+
|
28
|
+
# the token from the response parameters
|
29
|
+
def oauth_token
|
30
|
+
return nil unless token_class
|
31
|
+
oauth_version == 1.0 ? auth_params[:oauth_token] : auth_params[:code]
|
32
|
+
end
|
33
|
+
|
34
|
+
# the version of oauth we're using. Accessed from the OauthToken subclass
|
35
|
+
def oauth_version
|
36
|
+
token_class.oauth_version
|
37
|
+
end
|
38
|
+
|
39
|
+
# the Oauth gem consumer, whereby we can make requests to the server
|
40
|
+
def oauth_consumer
|
41
|
+
token_class.consumer
|
42
|
+
end
|
43
|
+
|
44
|
+
# this is a thick method.
|
45
|
+
# it gives you the final key and secret that we will store in the database
|
46
|
+
def oauth_token_and_secret
|
47
|
+
token_class.get_token_and_secret(
|
48
|
+
:token => auth_session[:oauth_request_token],
|
49
|
+
:secret => oauth_version == 1.0 ? auth_session[:oauth_request_token_secret] : oauth_token,
|
50
|
+
:oauth_verifier => auth_params[:oauth_verifier],
|
51
|
+
:redirect_uri => auth_callback_url
|
52
|
+
)
|
29
53
|
end
|
54
|
+
|
30
55
|
end
|
@@ -1,6 +1,9 @@
|
|
1
1
|
module AuthlogicConnect::Openid
|
2
2
|
end
|
3
3
|
|
4
|
+
require File.dirname(__FILE__) + "/openid/state"
|
5
|
+
require File.dirname(__FILE__) + "/openid/variables"
|
6
|
+
require File.dirname(__FILE__) + "/openid/process"
|
4
7
|
require File.dirname(__FILE__) + "/openid/user"
|
5
8
|
require File.dirname(__FILE__) + "/openid/session"
|
6
9
|
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module AuthlogicConnect::Openid::Process
|
2
|
+
|
3
|
+
include AuthlogicConnect::Openid::Variables
|
4
|
+
|
5
|
+
# want to do this after the final save
|
6
|
+
def cleanup_openid_session
|
7
|
+
[:auth_attributes, :authentication_type, :auth_callback_method].each {|key| auth_session.delete(key)}
|
8
|
+
auth_session.each_key do |key|
|
9
|
+
auth_session.delete(key) if key.to_s =~ /^OpenID/
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def validate_by_openid
|
14
|
+
errors.add(:tokens, "had the following error: #{@openid_error}") if @openid_error
|
15
|
+
end
|
16
|
+
|
17
|
+
def save_openid_session
|
18
|
+
# Tell our rack callback filter what method the current request is using
|
19
|
+
auth_session[:auth_callback_method] = auth_controller.request.method
|
20
|
+
auth_session[:auth_attributes] = attributes_to_save
|
21
|
+
auth_session[:authentication_type] = auth_params[:authentication_type]
|
22
|
+
auth_session[:auth_method] = "openid"
|
23
|
+
end
|
24
|
+
|
25
|
+
def restore_attributes
|
26
|
+
# Restore any attributes which were saved before redirecting to the auth server
|
27
|
+
self.attributes = auth_session[:auth_attributes]
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
@@ -3,48 +3,16 @@ module AuthlogicConnect::Openid
|
|
3
3
|
module Session
|
4
4
|
# Add a simple openid_identifier attribute and some validations for the field.
|
5
5
|
def self.included(klass)
|
6
|
-
klass.extend ClassMethods
|
7
6
|
klass.class_eval do
|
8
7
|
include InstanceMethods
|
9
8
|
end
|
10
9
|
end
|
11
10
|
|
12
|
-
module ClassMethods
|
13
|
-
# What method should we call to find a record by the openid_identifier?
|
14
|
-
# This is useful if you want to store multiple openid_identifiers for a single record.
|
15
|
-
# You could do something like:
|
16
|
-
#
|
17
|
-
# class User < ActiveRecord::Base
|
18
|
-
# def self.find_by_openid_identifier(identifier)
|
19
|
-
# user.first(:conditions => {:openid_identifiers => {:identifier => identifier}})
|
20
|
-
# end
|
21
|
-
# end
|
22
|
-
#
|
23
|
-
# Obviously the above depends on what you are calling your assocition, etc. But you get the point.
|
24
|
-
#
|
25
|
-
# * <tt>Default:</tt> :find_by_openid_identifier
|
26
|
-
# * <tt>Accepts:</tt> Symbol
|
27
|
-
def find_by_openid_identifier_method(value = nil)
|
28
|
-
rw_config(:find_by_openid_identifier_method, value, :find_by_openid_identifier)
|
29
|
-
end
|
30
|
-
alias_method :find_by_openid_identifier_method=, :find_by_openid_identifier_method
|
31
|
-
|
32
|
-
# Add this in your Session object to Auto Register a new user using openid via sreg
|
33
|
-
def auto_register(value=true)
|
34
|
-
auto_register_value(value)
|
35
|
-
end
|
36
|
-
|
37
|
-
def auto_register_value(value=nil)
|
38
|
-
rw_config(:auto_register,value,false)
|
39
|
-
end
|
40
|
-
|
41
|
-
alias_method :auto_register=,:auto_register
|
42
|
-
end
|
43
|
-
|
44
11
|
module InstanceMethods
|
12
|
+
include AuthlogicConnect::Openid::Process
|
13
|
+
|
45
14
|
def self.included(klass)
|
46
15
|
klass.class_eval do
|
47
|
-
attr_reader :openid_identifier
|
48
16
|
validate :validate_openid_error
|
49
17
|
validate :validate_by_openid, :if => :authenticating_with_openid?
|
50
18
|
end
|
@@ -58,18 +26,10 @@ module AuthlogicConnect::Openid
|
|
58
26
|
self.openid_identifier = hash[:openid_identifier] if !hash.nil? && hash.key?(:openid_identifier)
|
59
27
|
end
|
60
28
|
|
61
|
-
def openid_identifier=(value)
|
62
|
-
@openid_identifier = value.blank? ? nil : OpenIdAuthentication.normalize_identifier(value)
|
63
|
-
@openid_error = nil
|
64
|
-
rescue OpenIdAuthentication::InvalidOpenId => e
|
65
|
-
@openid_identifier = nil
|
66
|
-
@openid_error = e.message
|
67
|
-
end
|
68
|
-
|
69
29
|
# Cleaers out the block if we are authenticating with OpenID, so that we can redirect without a DoubleRender
|
70
30
|
# error.
|
71
31
|
def save_with_openid(&block)
|
72
|
-
block = nil if
|
32
|
+
block = nil if Token.find_by_key(openid_identifier.normalize_identifier)
|
73
33
|
return block.nil?
|
74
34
|
end
|
75
35
|
|
@@ -78,21 +38,14 @@ module AuthlogicConnect::Openid
|
|
78
38
|
attempted_record.nil? && errors.empty? && (!openid_identifier.blank? || (controller.params[:open_id_complete] && controller.params[:for_session]))
|
79
39
|
end
|
80
40
|
|
81
|
-
def find_by_openid_identifier_method
|
82
|
-
self.class.find_by_openid_identifier_method
|
83
|
-
end
|
84
|
-
|
85
|
-
def find_by_openid_identifier_method
|
86
|
-
self.class.find_by_openid_identifier_method
|
87
|
-
end
|
88
|
-
|
89
41
|
def auto_register?
|
90
|
-
|
42
|
+
false
|
91
43
|
end
|
92
44
|
|
93
45
|
def validate_by_openid
|
94
46
|
self.remember_me = auth_params[:remember_me] == "true" if auth_params.key?(:remember_me)
|
95
|
-
|
47
|
+
token = Token.find_by_key(openid_identifier.normalize_identifier, :include => [:user])
|
48
|
+
self.attempted_record = token.user if token
|
96
49
|
if !attempted_record
|
97
50
|
if auto_register?
|
98
51
|
self.attempted_record = klass.new :openid_identifier => openid_identifier
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# all these methods must return true or false
|
2
|
+
module AuthlogicConnect::Openid::State
|
3
|
+
# 1. to call
|
4
|
+
def openid_request?
|
5
|
+
!openid_identifier.blank?
|
6
|
+
end
|
7
|
+
|
8
|
+
def openid_identifier?
|
9
|
+
openid_request?
|
10
|
+
end
|
11
|
+
|
12
|
+
def openid_provider?
|
13
|
+
|
14
|
+
end
|
15
|
+
|
16
|
+
# 2. from call
|
17
|
+
# better check needed
|
18
|
+
def openid_response?
|
19
|
+
!auth_session[:auth_attributes].nil? && auth_session[:auth_method] == "openid"
|
20
|
+
end
|
21
|
+
alias_method :openid_complete?, :openid_response?
|
22
|
+
|
23
|
+
# 3. either to or from call
|
24
|
+
# this should include more!
|
25
|
+
# we know we are using open id if:
|
26
|
+
# the params passed in have "openid_identifier"
|
27
|
+
def using_openid?
|
28
|
+
openid_request? || openid_response?
|
29
|
+
end
|
30
|
+
|
31
|
+
def authenticating_with_openid?
|
32
|
+
session_class.activated? && using_openid?
|
33
|
+
end
|
34
|
+
|
35
|
+
def allow_openid_redirect?
|
36
|
+
authenticating_with_openid?
|
37
|
+
end
|
38
|
+
|
39
|
+
def redirecting_to_openid_server?
|
40
|
+
allow_openid_redirect? && !authenticate_with_openid
|
41
|
+
end
|
42
|
+
|
43
|
+
def validate_password_with_openid?
|
44
|
+
!using_openid? && require_password?
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
@@ -2,18 +2,17 @@ module AuthlogicConnect::Openid
|
|
2
2
|
module User
|
3
3
|
def self.included(base)
|
4
4
|
base.class_eval do
|
5
|
-
add_acts_as_authentic_module(
|
5
|
+
add_acts_as_authentic_module(AuthlogicConnect::Openid::Process, :prepend)
|
6
|
+
add_acts_as_authentic_module(InstanceMethods, :append)
|
6
7
|
end
|
7
8
|
end
|
8
9
|
|
9
10
|
module InstanceMethods
|
10
|
-
|
11
|
-
def self.included(base)
|
12
|
-
return if !base.column_names.include?("openid_identifier")
|
13
|
-
|
11
|
+
|
12
|
+
def self.included(base)
|
14
13
|
base.class_eval do
|
15
|
-
|
16
|
-
|
14
|
+
validate :validate_by_openid, :if => :authenticating_with_openid?
|
15
|
+
|
17
16
|
validates_length_of_password_field_options validates_length_of_password_field_options.merge(:if => :validate_password_with_openid?)
|
18
17
|
validates_confirmation_of_password_field_options validates_confirmation_of_password_field_options.merge(:if => :validate_password_with_openid?)
|
19
18
|
validates_length_of_password_confirmation_field_options validates_length_of_password_confirmation_field_options.merge(:if => :validate_password_with_openid?)
|
@@ -22,71 +21,42 @@ module AuthlogicConnect::Openid
|
|
22
21
|
end
|
23
22
|
end
|
24
23
|
|
25
|
-
def
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
24
|
+
def authenticate_with_openid
|
25
|
+
@openid_error = nil
|
26
|
+
if !openid_response?
|
27
|
+
save_openid_session
|
28
|
+
else
|
29
|
+
restore_attributes
|
30
|
+
end
|
31
|
+
options = {}
|
32
|
+
options[:return_to] = auth_callback_url(:for_model => "1", :action => "create")
|
33
|
+
auth_controller.send(:authenticate_with_open_id, openid_identifier, options) do |result, openid_identifier|
|
34
|
+
create_openid_token(result, openid_identifier)
|
35
|
+
return true
|
36
|
+
end
|
37
|
+
return false
|
30
38
|
end
|
31
39
|
|
32
|
-
def
|
33
|
-
|
34
|
-
|
40
|
+
def create_openid_token(result, openid_identifier)
|
41
|
+
if result.unsuccessful?
|
42
|
+
@openid_error = result.message
|
43
|
+
elsif Token.find_by_key(openid_identifier.normalize_identifier)
|
44
|
+
else
|
45
|
+
token = OpenidToken.new(:key => openid_identifier)
|
46
|
+
self.tokens << token
|
47
|
+
self.active_token = token
|
48
|
+
end
|
35
49
|
end
|
36
50
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
def openid_complete?
|
48
|
-
auth_session[:openid_attributes]
|
49
|
-
end
|
50
|
-
|
51
|
-
def authenticating_with_openid?
|
52
|
-
session_class.activated? && ((using_openid?) || openid_complete?)
|
53
|
-
end
|
54
|
-
|
55
|
-
def validate_password_with_openid?
|
56
|
-
!using_openid? && require_password?
|
57
|
-
end
|
58
|
-
|
59
|
-
def authenticating_with_openid
|
60
|
-
@openid_error = nil
|
61
|
-
if !openid_complete?
|
62
|
-
# Tell our rack callback filter what method the current request is using
|
63
|
-
auth_session[:auth_callback_method] = auth_controller.request.method
|
64
|
-
auth_session[:openid_attributes] = attributes_to_save
|
65
|
-
else
|
66
|
-
self.attributes = auth_session.delete(:openid_attributes)
|
67
|
-
end
|
68
|
-
|
69
|
-
options = {}
|
70
|
-
options[:return_to] = auth_controller.url_for(:for_model => "1", :controller => "users", :action => "create")
|
71
|
-
auth_controller.send(:authenticate_with_open_id, openid_identifier, options) do |result, openid_identifier, registration|
|
72
|
-
if result.unsuccessful?
|
73
|
-
@openid_error = result.message
|
74
|
-
else
|
75
|
-
self.openid_identifier = openid_identifier
|
76
|
-
end
|
77
|
-
return true
|
78
|
-
end
|
79
|
-
return false
|
80
|
-
end
|
81
|
-
|
82
|
-
def attributes_to_save
|
83
|
-
attrs_to_save = attributes.clone.delete_if do |k, v|
|
84
|
-
[:id, :password, crypted_password_field, password_salt_field, :persistence_token, :perishable_token, :single_access_token, :login_count,
|
85
|
-
:failed_login_count, :last_request_at, :current_login_at, :last_login_at, :current_login_ip, :last_login_ip, :created_at,
|
86
|
-
:updated_at, :lock_version].include?(k.to_sym)
|
87
|
-
end
|
88
|
-
attrs_to_save.merge!(:password => password, :password_confirmation => password_confirmation)
|
89
|
-
end
|
51
|
+
def attributes_to_save
|
52
|
+
attr_list = [:id, :password, crypted_password_field, password_salt_field, :persistence_token, :perishable_token, :single_access_token, :login_count,
|
53
|
+
:failed_login_count, :last_request_at, :current_login_at, :last_login_at, :current_login_ip, :last_login_ip, :created_at,
|
54
|
+
:updated_at, :lock_version]
|
55
|
+
attrs_to_save = attributes.clone.delete_if do |k, v|
|
56
|
+
attr_list.include?(k.to_sym)
|
57
|
+
end
|
58
|
+
attrs_to_save.merge!(:password => password, :password_confirmation => password_confirmation)
|
59
|
+
end
|
90
60
|
end
|
91
61
|
end
|
92
62
|
end
|