e7ddd0f72f
Add user authentication infrastructure with login/logout functionality, session management, and basic user model. Changes: - Create users table with email, password_digest, confirmation tokens - Add Users repository with authentication methods - Add User entity with authentication helpers - Implement login form and authentication actions - Add logout action - Add BCrypt gem for password hashing - Update base Action class with authentication helpers - Add login/logout routes Next steps: Registration flow, password reset, email confirmation
48 lines
1.2 KiB
Ruby
48 lines
1.2 KiB
Ruby
# auto_register: false
|
|
# frozen_string_literal: true
|
|
|
|
require "hanami/action"
|
|
|
|
module EuchreCamp
|
|
class Action < Hanami::Action
|
|
include Deps[users_repo: 'repositories.users', players_repo: 'repositories.players']
|
|
|
|
protected
|
|
|
|
# Get current user from session
|
|
def current_user(request)
|
|
user_id = request.session[:user_id]
|
|
return nil unless user_id
|
|
|
|
users_repo.by_id(user_id)
|
|
end
|
|
|
|
# Get current player from session
|
|
def current_player(request)
|
|
player_id = request.session[:player_id]
|
|
return nil unless player_id
|
|
|
|
players_repo.by_id(player_id)
|
|
end
|
|
|
|
# Check if user is logged in
|
|
def logged_in?(request)
|
|
!request.session[:user_id].nil?
|
|
end
|
|
|
|
# Require authentication - redirect to login if not logged in
|
|
def require_authentication(request, response)
|
|
unless logged_in?(request)
|
|
response.flash[:error] = 'Please login to continue'
|
|
response.redirect_to '/login'
|
|
end
|
|
end
|
|
|
|
# Helper to pass current_player to view
|
|
def render_with_player(request, response, **options)
|
|
player = current_player(request)
|
|
response.render(view, current_player: player, **options)
|
|
end
|
|
end
|
|
end
|