# frozen_string_literal: true require './lib/json_web_token' module UserAuthentication extend ActiveSupport::Concern included do def current_user return unless jwt @current_user ||= begin result = JsonWebToken.decode(jwt) User.find(result.first['id']) rescue StandardError => e Rails.logger.error(e.message) Rails.logger.debug(e.backtrace.join("\n")) nil end end def current_user=(user) self.jwt = JsonWebToken.encode(id: user.id, username: user.username) end def logged_in? !current_user.nil? end def login(user) self.current_user = user end def logout cookies.delete(:jwt) cookies.delete(:_csrf_token) cookies.delete('x-csrf-token') end end private def jwt cookies[:jwt] end def jwt=(jwt) cookies[:jwt] = { value: jwt, httponly: true, secure: !(Rails.env.development? || Rails.env.test?), } end end