diff --git a/README.md b/README.md index 080b2cb..a2c73de 100644 --- a/README.md +++ b/README.md @@ -119,6 +119,17 @@ Accessing the environment (query params, body, content_type, headers, status_cod end ``` +### Browser Redirect +Just like other things in `kemal`, browser redirection is super simple as well. Use `environment` variable in defined route's corresponding block and call `redirect` on it. + +```ruby + # Redirect browser + get "/logout" do |env| + # important stuff like clearing session etc. + env.redirect "/login" # redirect to /login page + end +``` + ## Middlewares You can create your own middlewares by inheriting from ```HTTP::Handler``` diff --git a/spec/kemal_handler_spec.cr b/spec/kemal_handler_spec.cr index 3201895..e2a7650 100644 --- a/spec/kemal_handler_spec.cr +++ b/spec/kemal_handler_spec.cr @@ -184,4 +184,15 @@ describe "Kemal::Handler" do response.status_code.should eq(404) end + it "redirects user to provided url" do + kemal = Kemal::Handler.new + kemal.add_route "GET", "/" do |env| + env.redirect("/login") + end + request = HTTP::Request.new("GET", "/") + response = kemal.call(request) + response.status_code.should eq(301) + response.headers.has_key?("Location").should eq(true) + end + end diff --git a/src/kemal/context.cr b/src/kemal/context.cr index 173bd71..f1d83fd 100644 --- a/src/kemal/context.cr +++ b/src/kemal/context.cr @@ -22,6 +22,11 @@ class Kemal::Context @response.content_type end + def redirect(url) + @response.headers.add "Location", url + @response.status_code = 301 + end + delegate headers, @request delegate status_code, @response delegate :"status_code=", @response