General HTTP Authentication Framework for Crystal, based on HTTP Server Handler means it compatibles with most of web frameworks which is could add http server handler(middlewave), such like kemal, router.cr, raze etc. Inspired from the awesome Ruby's warden gem.
require "dwarf"
# Load the framework plugin appropriate to your project, require one at least.
#
# Common request, support built-in http server, raze
# require "dwarf/services/common"
# Kemal framework
# require "dwarf/services/kemal"
# Amber framework
# require "dwarf/services/kemal"
# Create a password strategy
class PasswordStrategy < Dwarf::Strategies::Base
def valid?
params["username"]? && params["password"]?
end
def authenticate!
if params["username"] == "dwarf" && params["password"] == "foobar"
user = JSON.parse({ "name" => params["username"] }.to_json)
success!(user)
else
fail!
end
end
end
# Instance dwarf manager(handler)
dwarf_manager = Dwarf::Manager.new do |config|
config.register_strategy("password", PasswordStrategy.new)
config.default_strategies(strategies: ["password"])
end
# Then add `dwarf_manager.handler` to framework's handlers
Here has some examples for usages.
Add this to your application's shard.yml
:
dependencies:
dwarf:
github: icyleaf/dwarf
- Stores(session)
- Callbacks
- Fork it ( https://github.com/icyleaf/dwarf/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
- icyleaf - creator, maintainer