Token-based authentication helps your app know who a user is without asking for a password every time. It uses a secret token to keep users logged in safely.
Token-based authentication in Ruby on Rails
class User < ApplicationRecord has_secure_token :auth_token end # To generate or reset token: user.regenerate_auth_token # To authenticate using token: User.find_by(auth_token: token)
has_secure_token adds methods to generate and manage a unique, secure token attribute. Requires a database column (e.g., add_column :users, :auth_token, :string with add_index :users, :auth_token, unique: true).
You can call regenerate_auth_token to create a new token.
auth_token attribute to the User model that automatically generates a unique token. Add auth_token column via migration first.class User < ApplicationRecord
has_secure_token :auth_token
enduser = User.find(1)
user.regenerate_auth_token
puts user.auth_tokentoken = request.headers['Authorization']&.split(' ')&.last user = User.find_by(auth_token: token) if user # user is authenticated else # reject request end
This example creates a user, generates a token, then finds the user by that token to authenticate. Assumes users table with auth_token column.
class User < ApplicationRecord has_secure_token :auth_token end # Simulate creating a user and generating a token user = User.create! puts "User token: #{user.auth_token}" # Simulate authenticating with token token = user.auth_token found_user = User.find_by(auth_token: token) if found_user puts "Authenticated user ID: #{found_user.id}" else puts "Authentication failed" end
Always keep tokens secret and use HTTPS to protect them during transmission.
Tokens should be long and random to prevent guessing.
Tokens can be revoked by regenerating them if needed.
Token-based authentication uses a secret token to identify users without passwords each time.
Rails provides has_secure_token to easily add tokens to models.
Tokens help secure APIs and mobile apps without server sessions.
Practice
Solution
Step 1: Understand token-based authentication
Token-based authentication uses a secret token to identify users securely without needing passwords repeatedly.Step 2: Compare options
Only To identify users securely without requiring passwords every time correctly describes this purpose; others describe unrelated or incorrect behaviors.Final Answer:
To identify users securely without requiring passwords every time -> Option AQuick Check:
Token-based authentication = Identify users securely without passwords [OK]
- Confusing tokens with password storage
- Thinking tokens create server sessions
- Assuming tokens encrypt data automatically
Solution
Step 1: Recall Rails token helper methods
Rails provideshas_secure_tokento add a secure token to models easily.Step 2: Eliminate incorrect options
has_secure_passwordis for passwords, not tokens; others are not valid Rails methods.Final Answer:
has_secure_token -> Option CQuick Check:
Token method in Rails = has_secure_token [OK]
- Confusing has_secure_token with has_secure_password
- Using non-existent methods like generate_token
- Assuming validates_token is built-in
class User < ApplicationRecord has_secure_token :auth_token end user = User.new user.save puts user.auth_token.nil?
What will be the output?
Solution
Step 1: Understand has_secure_token behavior
When a new User is saved, Rails automatically generates a unique token forauth_token, so it won't be nil.Step 2: Evaluate the output of
Sinceputs user.auth_token.nil?auth_tokenis set,nil?returns false, so output is false.Final Answer:
false -> Option AQuick Check:
Token generated on save = false for nil? [OK]
- Assuming token is nil before save
- Expecting nil output instead of false
- Confusing method names causing errors
class ApiUser < ApplicationRecord has_secure_token :auth_token end user = ApiUser.new user.auth_token = nil user.save puts user.auth_token.nil?
Solution
Step 1: Recall has_secure_token generation condition
has_secure_token :auth_tokengenerates a token ifauth_token.blank?before save (nil.blank?returnstrue).Step 2: Trace code execution
Settinguser.auth_token = nilkeeps it blank, so save generates the token.user.auth_token.nil?returnsfalse. No error.Final Answer:
No error; output will be false -> Option DQuick Check:
nil.blank? = true -> generates token [OK]
- Thinking setting to nil prevents token generation
- Expecting save to raise error on nil token
- Thinking output is true because manually set to nil
Solution
Step 1: Understand token authentication in APIs
APIs commonly send tokens in headers; Rails can checkrequest.headers['Authorization']to find the user.Step 2: Evaluate options for correctness
Usebefore_actionto find user byauth_tokenfromrequest.headers['Authorization']and reject if not found correctly usesbefore_actionto authenticate by token. Options B and C misuse cookies and password helpers. Generate a new token on every request and compare with stored token is insecure and impractical.Final Answer:
Use before_action to find user by auth_token from request.headers['Authorization'] and reject if not found -> Option BQuick Check:
API token check = before_action with header token [OK]
- Using cookies or sessions for API token storage
- Confusing password helpers with token verification
- Generating new token each request causing mismatch
Ready to prove it?
Pass the test and this pattern moves unknown
