Hooked up on the fly OpenID user creation.
* Use OpenID registration fields for the user. * Generate a random password when a user is created. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@2443 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
parent
896e64b759
commit
0310f43126
|
@ -196,25 +196,25 @@ private
|
|||
|
||||
|
||||
def open_id_authenticate(openid_url)
|
||||
user = nil
|
||||
authenticate_with_open_id(openid_url, :required => [:nickname, :fullname, :email], :return_to => signin_url) do |result, identity_url, registration|
|
||||
if result.successful?
|
||||
user = User.find_or_initialize_by_identity_url(identity_url)
|
||||
if user.new_record?
|
||||
# Create on the fly
|
||||
# TODO: name
|
||||
user.login = registration['nickname']
|
||||
user.mail = registration['email']
|
||||
user.save
|
||||
end
|
||||
|
||||
user.reload
|
||||
if user.new_record?
|
||||
# Onthefly creation failed, display the registration form to fill/fix attributes
|
||||
@user = user
|
||||
session[:auth_source_registration] = {:login => user.login, :identity_url => identity_url }
|
||||
render :action => 'register'
|
||||
user.firstname, user.lastname = registration['fullname'].split(' ')
|
||||
user.random_password
|
||||
if user.save
|
||||
successful_authentication(user)
|
||||
else
|
||||
# Onthefly creation failed, display the registration form to fill/fix attributes
|
||||
@user = user
|
||||
session[:auth_source_registration] = {:login => user.login, :identity_url => identity_url }
|
||||
render :action => 'register'
|
||||
end
|
||||
else
|
||||
# Existing record
|
||||
successful_authentication(user)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -138,6 +138,18 @@ class User < ActiveRecord::Base
|
|||
def check_password?(clear_password)
|
||||
User.hash_password(clear_password) == self.hashed_password
|
||||
end
|
||||
|
||||
# Generate and set a random password. Useful for automated user creation
|
||||
# Based on Token#generate_token_value
|
||||
#
|
||||
def random_password
|
||||
chars = ("a".."z").to_a + ("A".."Z").to_a + ("0".."9").to_a
|
||||
password = ''
|
||||
40.times { |i| password << chars[rand(chars.size-1)] }
|
||||
self.password = password
|
||||
self.password_confirmation = password
|
||||
self
|
||||
end
|
||||
|
||||
def pref
|
||||
self.preference ||= UserPreference.new(:user => self)
|
||||
|
|
|
@ -177,4 +177,11 @@ class UserTest < Test::Unit::TestCase
|
|||
assert_not_nil u
|
||||
assert_equal 'jsmith@somenet.foo', u.mail
|
||||
end
|
||||
|
||||
def test_random_password
|
||||
u = User.new
|
||||
u.random_password
|
||||
assert !u.password.blank?
|
||||
assert !u.password_confirmation.blank?
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue