Method: Sandal.encode_token

Defined in:
lib/sandal.rb

.encode_token(payload, signer, header_fields = nil) ⇒ String

Creates a signed JSON Web Token.

Parameters:

  • payload (String or Hash)

    The payload of the token. Hashes will be encoded as JSON.

  • signer (#name, #sign)

    The token signer, which may be nil for an unsigned token.

  • header_fields (Hash) (defaults to: nil)

    Header fields for the token (note: do not include “alg”).

Returns:

  • (String)

    A signed JSON Web Token.



104
105
106
107
108
109
110
111
112
113
114
115
116
117
# File 'lib/sandal.rb', line 104

def self.encode_token(payload, signer, header_fields = nil)
  signer ||= Sandal::Sig::NONE

  header = {}
  header["alg"] = signer.name
  header = header_fields.merge(header) if header_fields
  header = Sandal::Json.dump(header)

  payload = Sandal::Json.dump(payload) unless payload.is_a?(String)

  sec_input = [header, payload].map { |p| Sandal::Util.jwt_base64_encode(p) }.join(".")
  signature = signer.sign(sec_input)
  [sec_input, Sandal::Util.jwt_base64_encode(signature)].join(".")
end