# Amber Auth

**Prerequisites**

* Familiar with MVC and terms such as Migrations, Database
* Amber Framework CLI already installed \([Installation Instructions](../guides/installation.md)\)
* Terminal console

## Overview

Virtually all web applications require a registering and authenticating users. As a result, most web frameworks have an excessive amount of options for implementing authentication. Amber Framework differs by providing a built-in generator for simple yet secure authentication that is sufficient yet easily extended at a later time. Amber allows you to get started writing your application without getting bogged down in application boilerplate.

## Using Amber Auth Generator

### 1. Generate Blogsy App

First, we generate our app by typing the following command in a terminal console.

```bash
amber new blogsy --deps -d sqlite
```

{% hint style="info" %}
The `--deps` will automatically install project dependencies. `-d sqlite` builds the project with a SQLite database.
{% endhint %}

### 2. Go to your project directory

Commands are performed within the root directory of our project.

```bash
cd blogsy
```

### 3. Scaffold the User Authentication

Next, we will scaffold our authentication system. The scaffold will generate several files to build a basic authentication system.

```bash
amber g auth User
```

The above command will give you the following output:

```text
08:26:45 Generate    | Rendering Auth user
08:26:45 Generate    | new       config/initializers/granite.cr
08:26:45 Generate    | new       spec/models/user_spec.cr
08:26:45 Generate    | new       spec/models/spec_helper.cr
08:26:45 Generate    | new       spec/controllers/spec_helper.cr
08:26:45 Generate    | new       db/migrations/20180110202645523_create_user.sql
08:26:45 Generate    | new       db/seeds.cr
08:26:45 Generate    | new       src/models/user.cr
08:26:45 Generate    | new       src/controllers/registration_controller.cr
08:26:45 Generate    | new       src/controllers/user_controller.cr
08:26:45 Generate    | new       src/controllers/session_controller.cr
08:26:45 Generate    | new       src/views/registration/new.slang
08:26:45 Generate    | rewritten src/views/layouts/_nav.slang
08:26:45 Generate    | new       src/views/user/show.slang
08:26:45 Generate    | new       src/views/user/edit.slang
08:26:45 Generate    | new       src/views/session/new.slang
08:26:45 Generate    | new       src/handlers/authenticate.cr
```

To finalize installing the generated authentication system, we have to migrate the database.

```text
amber db create migrate
```

```text
08:52:25 (INFO) Database    | Created database blogsy_development
08:52:25 (INFO) Database    | Migrating db, current version: 0, target: 20180110205213147
08:52:25 (INFO) Database    | OK   20180110205213147_create_user.sql
```

Now we can run our local development server and see our working authentication system.

```text
amber watch
```

```text
08:53:52 Watcher    | Terminating app Blogsy...
08:53:52 Watcher    | Compiling Blogsy...
08:53:52 Watcher    | Building project Blogsy...
08:54:05 Server     | [Amber 0.6.1] serving application "Blogsy" at http://0.0.0.0:3000
08:54:05 Server     | Server started in development.
08:54:05 Server     | Startup Time 00:00:00.000596000
```

### 4. Sign up and Sign in Pages

To see the signup page visit [http://0.0.0.0:3000/signup](http://0.0.0.0:3000/signup)

## Recap

Amber framework provides an authentication system generator that allows you to focus on build your application rather than implementation details. The built-in authentication generator is not a full-featured authentication system, it provides the basic framework and can be extended as needed.