Gives the current_user to kemal.
Add this to your application's shard.yml:
dependencies:
kemal-auth-token:
github: akwiatkowski/kemal-auth-tokenFirst, you need to initialize middleware.
auth_token_mw = Kemal::AuthToken.newYou 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)
endThere is path to sign in, which you can change if you want.
auth_token_mw.path = "/sign_in" # default valueIf 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"}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)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)
endKeep 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
endPlease read spec file :)
TODO: Write development instructions here
- Fork it ( https://github.com/akwiatkowski/kemal-auth-token/fork )
- Create your feature branch (git checkout -b my-new-feature)
- Commit your changes (git commit -am 'Add some feature')
- Push to the branch (git push origin my-new-feature)
- Create a new Pull Request
- akwiatkowski Aleksander Kwiatkowski - creator, maintainer