Gives the current_user
to kemal
.
Add this to your application's shard.yml
:
dependencies:
kemal-auth-token:
github: akwiatkowski/kemal-auth-token
First, you need to initialize middleware.
auth_token_mw = Kemal::AuthToken.new
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"}
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)
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
Please 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