Sha256: a47a0b93eb6cf0174fce5afc8f1f3b3a153375ac46f9480fbd2b388c7581988c

Contents?: true

Size: 1.09 KB

Versions: 5

Compression:

Stored size: 1.09 KB

Contents

# frozen_string_literal: true

module AnyCable
  module Rails
    module Ext
      # This module adds AnyCable JWT helpers to Action Cable
      module JWT
        # Handle expired tokens here to respond with a different disconnect reason
        def handle_open
          super
        rescue AnyCable::JWT::ExpiredSignature
          logger.error "An expired JWT token was rejected"
          close(reason: "token_expired", reconnect: false) if websocket&.alive?
        end

        def anycable_jwt_present?
          request.params[AnyCable.config.jwt_param].present? ||
            request.headers["x-#{AnyCable.config.jwt_param}"].present?
        end

        def identify_from_anycable_jwt!
          token = request.params[AnyCable.config.jwt_param].presence ||
            request.headers["x-#{AnyCable.config.jwt_param}"].presence

          identifiers = AnyCable::JWT.decode(token)
          identifiers.each do |k, v|
            public_send("#{k}=", v)
          end
        rescue AnyCable::JWT::VerificationError
          reject_unauthorized_connection
        end
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
anycable-rails-core-1.5.3 lib/anycable/rails/ext/jwt.rb
anycable-rails-core-1.5.2 lib/anycable/rails/ext/jwt.rb
anycable-rails-core-1.5.1 lib/anycable/rails/ext/jwt.rb
anycable-rails-core-1.5.0 lib/anycable/rails/ext/jwt.rb
anycable-rails-core-1.5.0.rc.1 lib/anycable/rails/ext/jwt.rb