authlogic_rpx 1.0.2 → 1.0.3

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.
@@ -1,3 +1,8 @@
1
+ == 1.0.3 released 2009-10-07
2
+
3
+ * added general error handler for session validation to give clean 'failure' when underlying errors encountered (e.g. user model database constraint violation)
4
+ * updated documentation
5
+
1
6
  == 1.0.2 released 2009-09-27
2
7
 
3
8
  * Fixed issue with rpx_popup that was causing an error on some webkit-based browsers (incl chrome)
@@ -17,6 +17,7 @@ Key features and capabilities:
17
17
  * <b>Authlogic_RPX issues and feedback:</b> [http://github.com/tardate/authlogic_rpx/issues]
18
18
 
19
19
  The demonstration Rails application is where you can see Authlogic_RPX in action:
20
+
20
21
  * <b>Live Demonstration Site:</b> [http://rails-authlogic-rpx-sample.heroku.com]
21
22
  * <b>Demonstration site source repository:</b> [http://github.com/tardate/rails-authlogic-rpx-sample]
22
23
 
@@ -30,19 +31,19 @@ The demonstration Rails application is where you can see Authlogic_RPX in action
30
31
 
31
32
  == Installing Authlogic RPX gem
32
33
 
33
- Three gems are required: authlogic, grosser-rpx_now, and tardate-authlogic_rpx. Install these as appropriate to your environment and preferences.
34
+ Three gems are required: authlogic, grosser-rpx_now, and authlogic_rpx. Install these as appropriate to your environment and preferences.
34
35
 
35
36
  Currently tested versions:
36
- * authlogic 2.1.1
37
+ * authlogic 2.1.2,2.1.1
37
38
  * grosser-rpx_now 0.5.10
38
- * tardate-authlogic_rpx 1.0.2
39
+ * authlogic_rpx 1.0.3
39
40
 
40
41
 
41
42
  === 1. Direct gem installation
42
43
 
43
44
  sudo gem install authlogic
44
45
  sudo gem install grosser-rpx_now --source http://gems.github.com
45
- sudo gem install tardate-authlogic_rpx --source http://gems.github.com
46
+ sudo gem install authlogic_rpx --source http://gemcutter.org
46
47
 
47
48
 
48
49
  === 2. Using Rails config.gems
@@ -51,7 +52,7 @@ Include in config/environment.rb:
51
52
 
52
53
  config.gem "authlogic"
53
54
  config.gem "grosser-rpx_now", :lib => "rpx_now", :source => 'http://gems.github.com'
54
- config.gem "tardate-authlogic_rpx", :lib => "authlogic_rpx", :source => 'http://gems.github.com'
55
+ config.gem "authlogic_rpx", :source => 'http://gemcutter.org'
55
56
 
56
57
  Then to install, run from the command line:
57
58
 
@@ -64,7 +65,7 @@ Include in RAILS_ROOT/.gems:
64
65
 
65
66
  authlogic
66
67
  grosser-rpx_now --source gems.github.com
67
- tardate-authlogic_rpx --source gems.github.com
68
+ authlogic_rpx --source gemcutter.org
68
69
 
69
70
 
70
71
  == Using Authlogic RPX
@@ -114,10 +115,10 @@ You may need to remove database constraints on other fields if they will be unus
114
115
  The user model then needs to be tagged with "acts_as_authentic", and you must add rpx_identifier to the attr_accessible configuration (if you are using it)
115
116
 
116
117
  class User < ActiveRecord::Base
117
- acts_as_authentic do |c|
118
+ acts_as_authentic do |c|
118
119
  c.my_config_option = my_value # for available options see documentation in: Authlogic::ActsAsAuthentic
119
120
  end # block optional
120
- attr_accessible :username, :email, :password, :password_confirmation, :rpx_identifier
121
+ attr_accessible :username, :email, :password, :password_confirmation, :rpx_identifier
121
122
  end
122
123
 
123
124
  {See the source for the sample user.rb}[http://github.com/tardate/rails-authlogic-rpx-sample/blob/master/app/models/user.rb].
@@ -155,9 +156,19 @@ For example, to disable auto-registration and enable extended info:
155
156
 
156
157
  {See the source for the sample user_session.rb}[http://github.com/tardate/rails-authlogic-rpx-sample/blob/master/app/models/user_session.rb].
157
158
 
158
- === 3. Add custom user profile mapping (optional)
159
+ === 3. Add custom user profile mapping during auto-registration (optional)
160
+
159
161
  When users auto-register, profile data from RPX is available to be inserted in the user's record on your site. By default, authlogic_rpx will map the username and email fields.
160
162
 
163
+ WARNING: if you are using auto-registration, any fields you map should NOT have unique constraints enforced at the database level.
164
+ Authlogic_rpx will optimistically attempt to save the user record during registration, and violating a unique constraint will cause the authentication/registration to fail.
165
+
166
+ You can/should enforce any required validations at the model level e.g.
167
+
168
+ validates_uniqueness_of :username, :case_sensitive => false
169
+
170
+ This will allow the auto-registration to proceed, and the user can be given a chance to rectify the validation errors on your user profile page.
171
+
161
172
  If you have other fields you want to map, you can provide your own implementation of the map_rpx_data method in the UserSession model. In that method, you will be updating the "self.attempted_record" object, with information from the "@rpx_data" object. See the {RPX documentation}[https://rpxnow.com/docs#profile_data] to find out about the set of information that is available.
162
173
 
163
174
  class UserSession < Authlogic::Session::Base
@@ -166,22 +177,22 @@ If you have other fields you want to map, you can provide your own implementatio
166
177
 
167
178
  private
168
179
 
169
- # map_rpx_data maps additional fields from the RPX response into the user object
170
- # override this in your session controller to change the field mapping
171
- # see https://rpxnow.com/docs#profile_data for the definition of available attributes
172
- #
173
- def map_rpx_data
174
- # map core profile data using authlogic indirect column names
175
- self.attempted_record.send("#{klass.login_field}=", @rpx_data['profile']['preferredUsername'] ) if attempted_record.send(klass.login_field).blank?
176
- self.attempted_record.send("#{klass.email_field}=", @rpx_data['profile']['email'] ) if attempted_record.send(klass.email_field).blank?
177
-
178
- # map some other columns explicityl
179
- self.attempted_record.fullname = @rpx_data['profile']['displayName'] if attempted_record.fullname.blank?
180
-
181
- if rpx_extended_info?
182
- # map some extended attributes
183
- end
184
- end
180
+ # map_rpx_data maps additional fields from the RPX response into the user object
181
+ # override this in your session controller to change the field mapping
182
+ # see https://rpxnow.com/docs#profile_data for the definition of available attributes
183
+ #
184
+ def map_rpx_data
185
+ # map core profile data using authlogic indirect column names
186
+ self.attempted_record.send("#{klass.login_field}=", @rpx_data['profile']['preferredUsername'] ) if attempted_record.send(klass.login_field).blank?
187
+ self.attempted_record.send("#{klass.email_field}=", @rpx_data['profile']['email'] ) if attempted_record.send(klass.email_field).blank?
188
+
189
+ # map some other columns explicitly
190
+ self.attempted_record.fullname = @rpx_data['profile']['displayName'] if attempted_record.fullname.blank?
191
+
192
+ if rpx_extended_info?
193
+ # map some extended attributes
194
+ end
195
+ end
185
196
 
186
197
  end
187
198
 
@@ -353,7 +364,7 @@ So how to put a "login" link on your page? Two helper methods are provided:
353
364
 
354
365
  Each takes an options hash:
355
366
  * <tt>link_text:</tt> text to use in the link (only used by rpx_popup)
356
- * <tt>app_name:</tt> name of the application (will be prepended to RPX domain and used in RPX dialogues)
367
+ * <tt>app_name:</tt> name of the application you set when registering your service at rpxnow.com (will be prepended to RPX domain and used in RPX dialogues)
357
368
  * <tt>return_url:</tt> url for the RPX callback (e.g. user_sessions_url)
358
369
  * <tt>add_rpx:</tt> Optional. If true, requests RPX callback to add to current session. Else runs normal authentication process (default). See "7. Allow users to "Add RPX" to existing accounts"
359
370
 
@@ -412,9 +423,18 @@ If you have issues or feedback, please log them in the {issues list on github}[h
412
423
  Some of the improvements currently on the radar:
413
424
  * Still figuring out how to write some good automated tests
414
425
  * Implement/verify support for RPX "paid" service features of their "Plus" and "Pro" accounts (to date, only tested with free RPX "Basic" account)
415
- * Add support for proxy/direct authentication (i.e. so you can programmatically "authenticate" as an existing user based on the RPX id)
416
426
 
417
427
 
428
+ == Note on programmatically grabbing an authenticated session
429
+
430
+ If you need to programmatically perform proxy authentication as a specific user (e.g. to run a batch process on behalf of the user), authlogic provides the necessary capability and this can be used with RPX-authenticated users too:
431
+
432
+ app.get "/" # force Authlogic::Session::Base.controller activation
433
+ user = User.find(:first)
434
+ session = UserSession.create(user, true) # skip authentication and log the user in directly, the true means "remember me"
435
+ session.valid?
436
+ => true
437
+
418
438
 
419
439
  == Internals
420
440
 
@@ -423,7 +443,23 @@ Some design principles:
423
443
  * All direct RPX processing is handled in the AuthlogicRpx::Session class (not in the ActiveRecord model)
424
444
  * It uses the plug-in architecture introduced in Authlogic v2.0.
425
445
 
446
+ ==== building the gem
426
447
 
448
+ * increment the version in lib/authlogic_rpx/version.rb
449
+ * update gem version refs in README.rdoc
450
+ * update CHANGELOG.rdoc
451
+
452
+ # update manifest file
453
+ $ rake manifest
454
+
455
+ # update gemspec
456
+ $ rake build_gemspec
457
+
458
+ # build the gem
459
+ gem build authlogic_rpx.gemspec
460
+
461
+ # push the gem to gemcutter (e.g. for version 1.0.3)
462
+ gem push authlogic_rpx-1.0.3.gem
427
463
 
428
464
  == Kudos and Kopywrite
429
465
 
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{authlogic_rpx}
5
- s.version = "1.0.2"
5
+ s.version = "1.0.3"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Paul Gallagher / tardate"]
9
- s.date = %q{2009-10-02}
9
+ s.date = %q{2009-10-07}
10
10
  s.description = %q{Authlogic extension/plugin that provides RPX (rpxnow.com) authentication support}
11
11
  s.email = %q{gallagher.paul@gmail.com}
12
12
  s.extra_rdoc_files = ["CHANGELOG.rdoc", "README.rdoc", "lib/authlogic_rpx.rb", "lib/authlogic_rpx/acts_as_authentic.rb", "lib/authlogic_rpx/helper.rb", "lib/authlogic_rpx/session.rb", "lib/authlogic_rpx/version.rb"]
@@ -67,7 +67,7 @@ module AuthlogicRpx
67
67
  validate :validate_by_rpx, :if => :authenticating_with_rpx?
68
68
  end
69
69
  end
70
-
70
+
71
71
  # Determines if the authenticated user is also a new registration.
72
72
  # For use in the session controller to help direct the most appropriate action to follow.
73
73
  #
@@ -159,12 +159,24 @@ module AuthlogicRpx
159
159
  return false
160
160
  end
161
161
  end
162
-
162
+
163
+ rescue
164
+ errors.add_to_base("There was an error in authentication. Please try again or contact the system administrators for assistance")
165
+ return false
163
166
  end
164
167
 
165
- # map_rpx_data maps additional fields from the RPX response into the user object
166
- # override this in your session controller to change the field mapping
167
- # see https://rpxnow.com/docs#profile_data for the definition of available attributes
168
+ # map_rpx_data maps additional fields from the RPX response into the user object during auto-registration.
169
+ # Override this in your session controller to change the field mapping
170
+ # See https://rpxnow.com/docs#profile_data for the definition of available attributes
171
+ #
172
+ # WARNING: if you are using auto-registration, any fields you map should NOT have unique constraints enforced at the database level.
173
+ # authlogic_rpx will optimistically attempt to save the user record during registration, and
174
+ # violating a unique constraint will cause the authentication/registration to fail.
175
+ #
176
+ # You can/should enforce any required validations at the model level e.g.
177
+ # validates_uniqueness_of :username, :case_sensitive => false
178
+ # This will allow the auto-registration to proceed, and the user can be given a chance to rectify the validation errors
179
+ # on your user profile page.
168
180
  #
169
181
  def map_rpx_data
170
182
  self.attempted_record.send("#{klass.login_field}=", @rpx_data['profile']['preferredUsername'] ) if attempted_record.send(klass.login_field).blank?
@@ -41,7 +41,7 @@ module AuthlogicRpx
41
41
 
42
42
  MAJOR = 1
43
43
  MINOR = 0
44
- TINY = 2
44
+ TINY = 3
45
45
 
46
46
  # The current version as a Version instance
47
47
  CURRENT = new(MAJOR, MINOR, TINY)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: authlogic_rpx
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paul Gallagher / tardate
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-10-02 00:00:00 +08:00
12
+ date: 2009-10-07 00:00:00 +08:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency