Skip to content
Kemal middleware to authentication via HTTP header token using JWT
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
spec
src
.gitignore
.travis.yml
LICENSE
README.md
shard.yml

README.md

kemal-auth-token

Gives the current_user to kemal.

Installation

Add this to your application's shard.yml:

dependencies:
  kemal-auth-token:
    github: akwiatkowski/kemal-auth-token

Usage

Initializer

First, you need to initialize middleware.

auth_token_mw = Kemal::AuthToken.new

Sign in

You must provide a way to sign user in. It is your choice how would you like to do it (fetch from DB, have predefined, ...).

You must return UserHash it is alias of Hash(String, (String | Int32 | Nil | Bool)).

You can use login, id, whatever instead of an email.

auth_token_mw.sign_in do |email, password|
  User.sign_in(email, password)
end

There is path to sign in, which you can change if you want.

auth_token_mw.path = "/sign_in" # default value

If you want sign in just execute POST request:

http = HTTP::Client.new("localhost", Kemal.config.port)
result = http.post_form("/sign_in", {"email" => "email@email.org", "password" => "password" })
json = JSON.parse(result.body)

Which return

{"token":"some weird characters"}

Using token

Next request can utilize token based authentication. You must provide it within HTTP headers.

headers = HTTP::Headers.new
headers["X-Token"] = "some weird characters"
http = HTTP::Client.new("localhost", Kemal.config.port)
result = http.exec("GET", "/path", headers)

Get current user

Kemal needs a way how to get user information from JWT token. You must tell how it should do.

auth_token_mw.load_user do |jwt_payload|
  User.load_user(jwt_payload)
end

Keep in mind that jwt_payload is Hash(String, JSON::Type).

You need to provide way to get user information from object (UserHash) stored in JWT token here. That information should be presented also as UserHash.

Later you can access current user information within Kemal code as below:

get "/current_user" do |env|
  env.current_user.to_json
end

Final note

Please read spec file :)

Development

TODO: Write development instructions here

Contributing

  1. Fork it ( https://github.com/akwiatkowski/kemal-auth-token/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request

Contributors

You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.