Bird
Raised Fist0
Ruby on Railsframework~10 mins

Session-based authentication in Ruby on Rails - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to set the user ID in the session after login.

Ruby on Rails
session[:user_id] = [1]
Drag options to blanks, or click blank then click option'
Aparams[:id]
Bsession[:id]
Ccurrent_user
Duser.id
Attempts:
3 left
💡 Hint
Common Mistakes
Storing the whole user object in the session instead of just the ID.
Using params[:id] which may not be the logged-in user's ID.
2fill in blank
medium

Complete the code to find the current user from the session.

Ruby on Rails
def current_user
  @current_user ||= User.find_by(id: [1])
end
Drag options to blanks, or click blank then click option'
Asession[:user_id]
Bparams[:user_id]
Ccookies[:user_id]
Drequest.user_id
Attempts:
3 left
💡 Hint
Common Mistakes
Using params which only holds data from the current request.
Using cookies directly without session.
3fill in blank
hard

Fix the error in the logout method to clear the session.

Ruby on Rails
def logout
  [1]
end
Drag options to blanks, or click blank then click option'
Asession.delete(:user_id)
Bsession.clear(:user_id)
Csession.remove(:user_id)
Dsession[:user_id] = nil
Attempts:
3 left
💡 Hint
Common Mistakes
Using session.clear(:user_id) which is not a valid method.
Setting session[:user_id] to nil instead of deleting it.
4fill in blank
hard

Fill both blanks to check if a user is logged in and redirect if not.

Ruby on Rails
def require_login
  unless [1]
    redirect_to [2], alert: "Please log in"
  end
end
Drag options to blanks, or click blank then click option'
Acurrent_user
Bsession[:user_id]
Clogin_path
Droot_path
Attempts:
3 left
💡 Hint
Common Mistakes
Checking session[:user_id] directly instead of current_user.
Redirecting to root_path instead of login_path.
5fill in blank
hard

Fill all three blanks to create a session-based login method.

Ruby on Rails
def login
  user = User.find_by(email: params[:email])
  if user && user.authenticate([1])
    session[[2]] = user.[3]
    redirect_to dashboard_path
  else
    flash.now[:alert] = "Invalid email or password"
    render :new
  end
end
Drag options to blanks, or click blank then click option'
Aparams[:password]
B:user_id
Cid
Dparams[:email]
Attempts:
3 left
💡 Hint
Common Mistakes
Using params[:email] instead of params[:password] for authentication.
Storing the whole user object in the session.
Using wrong session key other than :user_id.

Practice

(1/5)
1. What does session[:user_id] typically store in a Rails application using session-based authentication?
easy
A. The user's password
B. The user's email address
C. The ID of the currently logged-in user
D. The entire user object

Solution

  1. Step 1: Understand session usage in Rails

    Rails uses the session hash to store small pieces of data between requests, commonly the user ID for authentication.
  2. Step 2: Identify what session[:user_id] holds

    This key stores the unique identifier of the logged-in user to recognize them on subsequent requests.
  3. Final Answer:

    The ID of the currently logged-in user -> Option C
  4. Quick Check:

    session[:user_id] = user ID [OK]
Hint: Remember session stores user ID, not full user data [OK]
Common Mistakes:
  • Thinking session stores full user object
  • Confusing user ID with password or email
  • Assuming session is client-side storage
2. Which of the following is the correct way to log out a user by clearing the session in a Rails controller?
easy
A. session.clear
B. All of the above
C. session[:user_id] = nil
D. session.delete(:user_id)

Solution

  1. Step 1: Review methods to clear session data

    In Rails, you can remove session data by clearing all keys, deleting a specific key, or setting a key to nil.
  2. Step 2: Confirm all options effectively log out user

    All three methods remove the user ID from session, effectively logging out the user.
  3. Final Answer:

    All of the above -> Option B
  4. Quick Check:

    Any method removing user_id logs out user [OK]
Hint: Any method removing session[:user_id] logs out user [OK]
Common Mistakes:
  • Only using session[:user_id] = nil and ignoring others
  • Trying to clear session without removing user_id
  • Confusing session.clear with resetting entire app
3. Given this Rails controller code snippet:
def create
  user = User.find_by(email: params[:email])
  if user&.authenticate(params[:password])
    session[:user_id] = user.id
    redirect_to dashboard_path
  else
    render :new
  end
end

What happens when the user enters correct email and password?
medium
A. User ID is saved in session and redirected to dashboard
B. User is redirected to login page again
C. Session is cleared and user stays on login page
D. An error is raised because session[:user_id] is not set

Solution

  1. Step 1: Analyze authentication condition

    The code checks if a user with the given email exists and if the password matches using authenticate.
  2. Step 2: Understand session assignment and redirect

    If authentication passes, it stores the user's ID in session and redirects to the dashboard.
  3. Final Answer:

    User ID is saved in session and redirected to dashboard -> Option A
  4. Quick Check:

    Correct login sets session[:user_id] and redirects [OK]
Hint: Correct login sets session[:user_id] and redirects [OK]
Common Mistakes:
  • Assuming user stays on login page after success
  • Thinking session[:user_id] is not set on success
  • Confusing render with redirect behavior
4. Identify the error in this logout action:
def logout
  session[:user] = nil
  redirect_to root_path
end
medium
A. No error, this code works fine
B. redirect_to should be redirect_back
C. session[:user] = nil does not clear session
D. Session key should be :user_id, not :user

Solution

  1. Step 1: Check session key used for authentication

    Rails session-based authentication typically uses session[:user_id] to track logged-in user.
  2. Step 2: Identify mismatch in session key

    The code sets session[:user] to nil, which does not clear the actual user ID stored in session[:user_id].
  3. Final Answer:

    Session key should be :user_id, not :user -> Option D
  4. Quick Check:

    Correct session key is :user_id [OK]
Hint: Use session[:user_id] to clear login, not session[:user] [OK]
Common Mistakes:
  • Using wrong session key name
  • Assuming setting any session key to nil logs out user
  • Confusing redirect_to with redirect_back
5. You want to restrict access to a controller action so only logged-in users can see it. Which code snippet correctly checks session-based authentication before allowing access?
hard
A. before_action :require_login def require_login redirect_to login_path unless session[:user_id] end
B. before_action :require_login def require_login redirect_to login_path if session[:user_id] end
C. before_action :require_login def require_login redirect_to root_path unless session[:user_id] end
D. before_action :require_login def require_login redirect_to login_path unless session[:user] end

Solution

  1. Step 1: Understand access control with before_action

    Use a method to check if session[:user_id] exists before allowing access.
  2. Step 2: Identify correct redirect condition

    If session[:user_id] is missing, redirect to login page to block access.
  3. Final Answer:

    Redirect to login unless session[:user_id] exists -> Option A
  4. Quick Check:

    Access allowed only if session[:user_id] present [OK]
Hint: Redirect unless session[:user_id] exists to protect pages [OK]
Common Mistakes:
  • Redirecting if session[:user_id] exists (wrong logic)
  • Using wrong session key like :user
  • Redirecting to wrong path on failure
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard