Module: AnyCable::Rails::Ext::JWT

Defined in:
lib/anycable/rails/ext/jwt.rb

Overview

This module adds AnyCable JWT helpers to Action Cable

Instance Method Summary collapse

Instance Method Details

#anycable_jwt_present?Boolean

Returns:



16
17
18
19
# File 'lib/anycable/rails/ext/jwt.rb', line 16

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

#handle_openObject

Handle expired tokens here to respond with a different disconnect reason



9
10
11
12
13
14
# File 'lib/anycable/rails/ext/jwt.rb', line 9

def handle_open
  super
rescue AnyCable::JWT::ExpiredSignature
  logger.error "An expired JWT token was rejected"
  close(reason: "token_expired", reconnect: false)
end

#identify_from_anycable_jwt!Object



21
22
23
24
25
26
27
28
29
30
31
# File 'lib/anycable/rails/ext/jwt.rb', line 21

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