 

class AuthToken < ActiveRecord::Base
  belongs_to :user
  def self.authenticate(token)
    find_by(token: token).try(:user)
  end
  def self.fetch(user)
    return user.auth_token if user.auth_token.present?
    user.create_auth_token(token: generate_token)
  end
  def self.generate_token
    SecureRandom.hex
  end
endmodule TokenAuth
  def current_user
    authenticate_with_http_token { |token| AuthToken.authenticate(token) }
  end
end
class SessionsController
  def create
    user = User.authenticate_with_credentials(params[:login], params[:password])
    if user
      render json: { token: AuthToken.fetch(user) }
    else
      head :forbidden
    end
  end
end
getAuthorizationHeader: ->
  token = $.cookie('auth-token')
  "Token #{token}" if token
setCookie: (data) ->
  $.cookie('auth-token', data.token, { expire: 365 })
$.ajaxPrefilter (options, originalOptions, xhr) =>
   xhr.setRequestHeader('Authorization', getAuthorizationHeader())
$.post('/sessions.json', { login: 'user', password: 'secret' }).done(setCookie)
user_id = 123
claim = {
  iss: user_id,
  exp: 1.week.from_now,
  nbf: Time.now
}
jwt = JSON::JWT.new(claim).to_s
jws = JSON::JWT.new(claim).sign(key)
jws.to_s
# With signature & encryption
jwe = jws.encrypt(key, algorithm, encryption_method)
jws.to_s