Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ## Model
- require 'digest/sha1'
- class Driver < ActiveRecord::Base
- # Virtual attribute for the unencrypted password
- attr_accessor :password
- has_many :vehicles
- 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
- validates_presence_of :first_name
- validates_presence_of :last_name
- validates_presence_of :city
- validates_presence_of :state
- validates_presence_of :zip
- validates_length_of :zip, :is => 5
- validates_numericality_of :zip
- validates_length_of :city, :minimum => 2
- # validates_length_of :state, :minimum => 2, :if => :password_required?
- before_save :encrypt_password
- # prevents a user from submitting a crafted form that bypasses activation
- # anything else you want your user to change should be added here.
- attr_accessible :login, :email, :password, :password_confirmation, :first_name, :last_name, :city, :state, :zip
- # 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
- remember_me_for 2.weeks
- end
- def remember_me_for(time)
- remember_me_until time.from_now.utc
- end
- def remember_me_until(time)
- self.remember_token_expires_at = time
- 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
- # Returns true if the user has just been activated.
- def recently_activated?
- @activated
- 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
- ## View (html_rails)
- <div id="right-menu">
- <%= render_partial '/partials/user_menu' %>
- </div>
- <div id="content">
- <h2>Edit Profile Information</h2><br />
- <%= error_messages_for :driver %>
- <% form_for :driver, :url => driver_url(@driver), :html => { :method => :put } do |f| -%>
- <p><%= f.label :login, "Login" %><br/>
- <%= f.text_field :login %></p>
- <p><%= f.label :email, "Email" %><br/>
- <%= f.text_field :email %></p>
- <p><%= f.label :first_name, "First Name" %><br />
- <%= f.text_field :first_name %></p>
- <p><%= f.label :last_name, "Last Name" %><br />
- <%= f.text_field :last_name %></p>
- <p><%= f.label :city, "City" %><br />
- <%= f.text_field :city %></p>
- <p><%= f.label :state, "State" %><br />
- <%= f.select(:state, [
- ['Select a State', ''],
- #giant list of states...
- ]) %></p>
- <p><%= label :zip, "Zip Code" %><br />
- <%= f.text_field :zip %></p>
- <p><%= submit_tag 'Update Profile' %></p>
- <% end -%>
- </div>
- ## Controller
- class DriversController < ApplicationController
- # render new.rhtml
- def new
- end
- def create
- cookies.delete :auth_token
- # protects against session fixation attacks, wreaks havoc with
- # request forgery protection.
- # uncomment at your own risk
- # reset_session
- @driver = Driver.new(params[:driver])
- @driver.save
- if @driver.errors.empty?
- self.current_driver = @driver
- redirect_back_or_default('/')
- flash[:notice] = "Thanks for signing up!"
- else
- render :action => 'new'
- end
- end
- def edit
- @driver = current_driver
- end
- def update
- @driver = current_driver
- @driver.attributes = params[:driver]
- if @driver.save
- flash[:notice] = "Update successful!"
- else
- render :action => 'edit'
- end
- end
- end
Add Comment
Please, Sign In to add comment