Manual Installation

  1. Create mochi.cr in initalizers and paste this in:

    require "mochi"
  2. Create a migration and paste in:

    Granite:

    ```sql -- +micrate Up CREATE TABLE users ( id INTEGER NOT NULL PRIMARY KEY, email VARCHAR, password_digest VARCHAR, created_at TIMESTAMP, updated_at TIMESTAMP );

-- +micrate Down
DROP TABLE IF EXISTS users;
```
or
**Jennifer:**
```crystal
class CreateUser < Jennifer::Migration::Base
def up
create_table(:users) do |t|
t.string :email
t.string :password_digest
t.timestamp :created_at
t.timestamp :updated_at
end
end
def down
drop_table(:users)
end
end
```
  1. Migrate:

    Granite:

    amber db migrate

    or

    Jennifer:

    crystal sam.cr -- db:migrate
  2. Create a controller titled user_controller.cr and paste in this file:

    user_controller

  3. Create a controller titled session_controller.cr and paste in this file:

    session_controller

  4. Add these to your routes:

    Change pipeline :web to pipeline :web, :auth and add:

    plug CurrentUser.new

    Create an :auth pipeline with:

    pipeline :auth do
    plug Authenticate.new
    end

    Create a new route section just for :auth:

    routes :auth do
    get "/profile", UserController, :show
    get "/profile/edit", UserController, :edit
    patch "/profile", UserController, :update
    get "/signout", SessionController, :delete
    end

    Add this to your :web routes:

    get "/signin", SessionController, :new
    post "/session", SessionController, :create
    get "/signup", UserController, :new
    post "/registration", UserController, :create
  5. Create a piple titled authenticate.cr and paste in this file:

    authenticate

  6. Copy & Paste all the views found here:

    Views

  7. Add a model:

    Granite:

    user

    or

    Jennifer:

    user{:target="_blank"}

  8. Open config/application.cr and between the # Start Generator & # End Generator add:

    require "../src/models/**"
    require "../src/pipes/**"
  9. Open application_controller.cr and add:

    def current_user
    context.current_user
    end
  10. Done! And that's why we have a CLI.