This is a distilation for how to roll a simple authentication system in Rails 3.
Excellent Sources:
RailsTutorials.org
RailsCasts Episode #250
-
Add
bcrypt-ruby
gem andbundle
-
Generate controller
rails g controller users
- Note: controllers are named plural by convention
-
Generate model
rails g model user name:string email:string
bundle exec rake db:migrate
- Set up validations
validates :name, presence: true
validates :email, presence: true, uniqueness: { case_insensitive: false }
- Note: models are named singular by convention
- Ensure uniqueness of each user
- Add index to User model (helps with uniquness)
- Run
rails g migration add_index_to_users_email
- In generate migration file add line:
add_index :users, :email, unique: true
bundle exec db:migrate
- In
models/user.rb
add the line:before_save { |user| user.email = email.downcase }
- Run
- Add index to User model (helps with uniquness)
-
Adding secure/encrypted password
- Read up on has_secure_password
- Add password_digets to User db
- Run
rails g migration add_password_digest_to_users password_digest:string
- Then db:migrate
bundle exec rake db:migrate
- Run
-
Setting up user authentication
- If not installed install bcrypt gem
- Make sure password and probably password_confirmation are accessible in modles/user.rb
attr_accessible ... :password, :password_confirmation
- Requre presence of password in model
validates :password, presence: true
, set a min length validation if desiredvalidates :password_confirmation, presence: true
-
Configure routes to handle users resources.
resources :users
-
Create any view that you need, show, new etc.
-
Write actions for signing up users
new
andcreate