feat(auth): implement authentication system foundation
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
This commit is contained in:
@@ -5,5 +5,43 @@ 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
|
||||
|
||||
Reference in New Issue
Block a user