kemal-auth-token
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
- 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
Contributors
- akwiatkowski Aleksander Kwiatkowski - creator, maintainer