feat: limit concurrent sessions per user with active session management (CW-7169)

This commit is contained in:
Vishnu Narayanan
2026-06-02 13:11:58 +05:30
committed by Vishnu Narayanan
parent 3eed8905cc
commit 13ad505bbb
22 changed files with 703 additions and 2 deletions
@@ -0,0 +1,31 @@
class Api::V1::Profile::SessionsController < Api::BaseController
before_action :set_session, only: [:destroy]
def index
@sessions = current_user.user_sessions.order(last_activity_at: :desc)
@current_client_id = request.headers['client']
end
def destroy
if @session.current?(request.headers['client'])
render json: { error: I18n.t('profile_settings.sessions.cannot_revoke_current') }, status: :unprocessable_entity
return
end
revoke_token!(@session.client_id)
@session.destroy!
head :ok
end
private
def set_session
@session = current_user.user_sessions.find(params[:id])
end
def revoke_token!(client_id)
tokens = current_user.tokens
tokens.delete(client_id)
current_user.update!(tokens: tokens)
end
end