Authenticate

This recipe will help you to setup an authentication pipe in your application:

First you need an amber project generated with Amber CLI or from scratch.

src/pipes/authenticate.cr
```ruby class Authenticate < Amber::Pipe::Base PUBLIC_PATHS = ["/"]

def call(context) some_id = context.session["some_id"]? # setup by some controller if some_id || public_path?(context.request.path) call_next(context) else context.flash[:warning] = "Please Sign In" context.response.headers.add "Location", "/" context.response.status_code = 302 end end

private def public_path?(path) PUBLIC_PATHS.includes?(path)

# Different strategies can be used to determine if a path is public
# Example, if /admin/* paths are the only private paths
# return false if path.starts_with?("/admin")
#
# Example, if only a few private paths exist
# return false if ["/secret", "/super/secret"].includes?(path)

end end

</div>


Then in your routes file:


<div class="code-block-titled"><div class="code-title">config/routes.cr</div>
```ruby
Amber::Server.configure do |app|
  pipeline :web do
    # other pipes...
    plug Authenticate.new
  end

  routes :web do
    # some routes,,,
  end
end

To have a full authentication experience some extra controllers, views and models are still required, please see Amber Auth Example.

Also see pipelines.