What does has_secure_password do in a Rails model?
It adds methods to set and authenticate a password securely using bcrypt. It also adds validations for password presence and confirmation.
Click to reveal answer
beginner
Which gem must be included in your Rails project to use has_secure_password?
The bcrypt gem is required because it handles password hashing securely.
Click to reveal answer
beginner
What database column is required to use has_secure_password?
A string column named password_digest must exist in the model's table to store the hashed password.
Click to reveal answer
intermediate
How do you check if a password is correct using has_secure_password?
Use the authenticate method on the model instance, passing the password. It returns the user if correct, or false if not.
Click to reveal answer
intermediate
What validations does has_secure_password add automatically?
It validates that the password is present on creation and that password confirmation matches if provided.
Click to reveal answer
Which column must be added to your database table to use has_secure_password?
Apassword_digest
Bpassword
Cencrypted_password
Dpassword_hash
✗ Incorrect
The password_digest column stores the hashed password when using has_secure_password.
What gem is required to use has_secure_password in Rails?
Aopenssl
Bdevise
Crails-password
Dbcrypt
✗ Incorrect
The bcrypt gem handles password hashing securely for has_secure_password.
What method does has_secure_password add to check a password?
Averify_password
Bcheck_password
Cauthenticate
Dvalidate_password
✗ Incorrect
The authenticate method checks if a given password matches the stored hash.
Which validation is automatically added by has_secure_password?
APassword length minimum 12
BPassword presence on creation
CUsername uniqueness
DEmail format validation
✗ Incorrect
has_secure_password ensures the password is present when creating a new record.
What happens if you call authenticate with a wrong password?
AReturns false
BRaises an error
CReturns the user object
DReturns nil
✗ Incorrect
authenticate returns false if the password does not match.
Explain how has_secure_password helps secure user passwords in Rails.
Think about how passwords are stored and checked safely.
You got /4 concepts.
Describe the steps to add password authentication to a Rails model using has_secure_password.
Consider what you need in the database, code, and how to check passwords.
You got /4 concepts.
Practice
(1/5)
1. What does has_secure_password add to a Rails model?
easy
A. Password encryption and authentication methods
B. Automatic email validation
C. Database indexing for passwords
D. User role management
Solution
Step 1: Understand the purpose of has_secure_password
This method adds password encryption and authentication features to a model.
Step 2: Identify what it does not add
It does not handle email validation, indexing, or roles.
Final Answer:
Password encryption and authentication methods -> Option A
Quick Check:
has_secure_password = Password encryption and authentication [OK]
Hint: Remember it handles passwords securely, not emails or roles [OK]
Common Mistakes:
Thinking it validates emails
Assuming it manages user roles
Believing it creates database indexes
2. Which of the following is the correct way to enable has_secure_password in a Rails model?
easy
A. Add secure_password inside the model class
B. Add has_secure_password inside the model class
C. Add password_digest method inside the model
D. Add encrypt_password in the controller
Solution
Step 1: Recall the syntax for enabling password security
The correct syntax is to call has_secure_password inside the model class.
Step 2: Eliminate incorrect options
The other options use wrong method names or wrong places.
Final Answer:
Add has_secure_password inside the model class -> Option B
Quick Check:
Enable with has_secure_password in model = Add has_secure_password inside the model class [OK]
Hint: Use exact method name inside model class [OK]
Common Mistakes:
Using wrong method names like secure_password
Trying to add password_digest as a method
Placing password logic in controller
3. Given this model code:
class User < ApplicationRecord
has_secure_password
end
And this code:
user = User.new(password: 'secret', password_confirmation: 'secret')
user.save
user.authenticate('secret')
What will user.authenticate('secret') return?
medium
A. nil
B. false
C. The user object
D. An error
Solution
Step 1: Understand authenticate behavior
It returns the user object if the password matches.
Step 2: Check password and confirmation match
Since password and confirmation are both 'secret', save succeeds and authenticate returns user.
Final Answer:
The user object -> Option C
Quick Check:
Correct password authenticates user object [OK]
Hint: authenticate returns user if password matches, else false [OK]
Common Mistakes:
Expecting authenticate to return true/false only
Confusing nil and false return values
Ignoring password confirmation
4. You added has_secure_password to your model but get this error when saving: ActiveModel::MissingAttributeError: can't write unknown attribute `password_digest`. What is the likely cause?
medium
A. You did not validate password presence
B. You did not call has_secure_password in the model
C. You used password instead of password_digest in the form
D. You forgot to add the password_digest column to the database
Solution
Step 1: Understand the error meaning
The error says the model cannot write to password_digest attribute because it does not exist.
Step 2: Identify missing database column
has_secure_password requires a password_digest column in the database table.
Final Answer:
You forgot to add the password_digest column to the database -> Option D
Quick Check:
Missing password_digest column causes this error [OK]
Hint: Add password_digest column to fix this error [OK]
Common Mistakes:
Thinking it's a missing method call
Confusing form field names with database columns
Assuming validation causes this error
5. You want to create a User model with secure passwords and also ensure users can only update their password if they provide the current password correctly. Which approach correctly combines has_secure_password with this logic?
hard
A. Use has_secure_password and add a custom method to verify current password before update
B. Use has_secure_password and override authenticate to check current password
C. Add password_digest column but handle password encryption manually
D. Use has_secure_password and skip password confirmation validation
Solution
Step 1: Understand has_secure_password role
It provides password encryption and authentication but does not enforce current password checks on update.
Step 2: Implement custom logic for current password verification
You must add a method that checks the current password before allowing password update.
Step 3: Evaluate options
Use has_secure_password and add a custom method to verify current password before update correctly combines has_secure_password with custom verification. Use has_secure_password and override authenticate to check current password incorrectly suggests overriding authenticate. Add password_digest column but handle password encryption manually ignores has_secure_password benefits. Use has_secure_password and skip password confirmation validation weakens security.
Final Answer:
Use has_secure_password and add a custom method to verify current password before update -> Option A
Quick Check:
Combine has_secure_password with custom current password check [OK]
Hint: Add custom method to check current password before update [OK]
Common Mistakes:
Overriding authenticate method incorrectly
Handling encryption manually instead of using has_secure_password
Skipping password confirmation validation
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.