Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ## I have the following mediawiki database.
- mysql> desc user;
- -------------------------- ----------------- ------ ----- --------- ----------------
- | Field | Type | Null | Key | Default | Extra |
- -------------------------- ----------------- ------ ----- --------- ----------------
- | user_id | int(5) unsigned | NO | PRI | NULL | auto_increment |
- | user_name | varchar(255) | NO | UNI | | |
- | user_real_name | varchar(255) | NO | | | |
- | user_password | tinyblob | NO | | | |
- | user_newpassword | tinyblob | NO | | | |
- | user_email | tinytext | NO | | | |
- | user_options | blob | NO | | | |
- | user_touched | varchar(14) | NO | | | |
- | user_token | varchar(32) | NO | | | |
- | user_email_authenticated | varchar(14) | YES | | NULL | |
- | user_email_token | varchar(32) | YES | MUL | NULL | |
- | user_email_token_expires | varchar(14) | YES | | NULL | |
- | user_registration | char(14) | YES | | NULL | |
- -------------------------- ----------------- ------ ----- --------- ----------------
- 13 rows in set (0.24 sec)
- mysql>
- ## and I am accessing it using the following model:
- class RemoteUser < ActiveRecord::Base
- self.table_name = "user"
- ActiveRecord::Base.establish_connection(
- :adapter => "mysql",
- :host => "remotewiki.com",
- :username => "remote_remote",
- :password => "passowrd",
- :database => "db"
- )
- end
- ## How can I use the crypted_hash, id and login within acts_as_authenticated's user.rb model?
- require 'digest/sha1'
- class User < ActiveRecord::Base
- has_many :posts
- has_many :comments
- # Virtual attribute for the unencrypted password
- attr_accessor :password
- validates_presence_of :login, :email
- validates_presence_of :password, :if => :password_required?
- validates_presence_of :password_confirmation, :if => :password_required?
- validates_length_of :password, :within => 4..40, :if => :password_required?
- validates_confirmation_of :password, :if => :password_required?
- validates_length_of :login, :within => 3..40
- validates_length_of :email, :within => 3..100
- validates_uniqueness_of :login, :email, :case_sensitive => false
- before_save :encrypt_password
- # Authenticates a user by their login name and unencrypted password. Returns the user or nil.
- def self.authenticate(login, password)
- u = find_by_login(login) # need to get the salt
- u && u.authenticated?(password) ? u : nil
- end
- # Encrypts some data with the salt.
- def self.encrypt(password, salt)
- Digest::SHA1.hexdigest("--#{salt}--#{password}--")
- end
- # Encrypts the password with the user salt
- def encrypt(password)
- self.class.encrypt(password, salt)
- end
- def authenticated?(password)
- crypted_password == encrypt(password)
- end
- def remember_token?
- remember_token_expires_at && Time.now.utc < remember_token_expires_at
- end
- # These create and unset the fields required for remembering users between browser closes
- def remember_me
- self.remember_token_expires_at = 2.weeks.from_now.utc
- self.remember_token = encrypt("#{email}--#{remember_token_expires_at}")
- save(false)
- end
- def forget_me
- self.remember_token_expires_at = nil
- self.remember_token = nil
- save(false)
- end
- protected
- # before filter
- def encrypt_password
- return if password.blank?
- self.salt = Digest::SHA1.hexdigest("--#{Time.now.to_s}--#{login}--") if new_record?
- self.crypted_password = encrypt(password)
- end
- def password_required?
- crypted_password.blank? || !password.blank?
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement