This tutorial is about building a user authentication system using AdonisJs.
AdonisJs is a Node.js MVC framework that runs on all major operating systems. It offers a stable ecosystem to write server-side web applications so you can focus on business needs over finalizing which package to choose or not.
Here are some of the benefit of using AdonisJs in my own opinion:
- It is easy to set up a project and also integrates database
- It has good documentation which makes it easy to learn.
- It modularizes your codebase based on its opinionated nature.
- It reduces your development time.
This tutorial is going to be in series and will cover the following areas:
- Project setup
- User Signup and login
- User's Input field validation
- Phone and Email verification
- Forget and reset password functionality
- Social Media Login System
- Role-based authorization system.
PROJECT SETUP
Adonis by default can be used to create a full-stack app, but since we'll be building a REST API, we'll set up with the --api only flag. This will install the modules or dependencies for building the API.
Below are the following steps to follow to set up the project:
Step 1: install Adonis CLI globally
npm i -g @adonisjs/cli
Step 2: create an Adonis project by running the command below in the terminal
adonis new authsys --api-only
Step 3: cd into authsys project directory and run the server
cd authsys adonis serve --dev
Confirm that the server runs on localhost(127.0.0.1) and also on port 3333 by entering http://127.0.0.1:3333 on our browser URL. If everything goes well then it should return {"greeting":"Hello world in JSON"} as the response.
{"greeting":"Hello world in JSON"}
Step 4:
Database Setup
Since we are creating a user authentication system, we'll only need a user table in our database. Adonis.js comes with a user migration file and a token migration file, but for our project, we'll update the user migration file to create our user table on our database. We'll also take advantage of other authentication feature like password hashing, JWT authentication, timestamps etc which Adonis.js has made available for us.
we'll make use of MySQL but you can make use of other relational databases such as PostgreSQL, SQLite etc. you can following this link to install MySQL Community Server https://dev.mysql.com/downloads/mysql/ and MySQL workbench https://dev.mysql.com/downloads/workbench/
we'll create the database from the workbench interface, we'll name it authsys_db
install MySQL npm package, this will connect the app to the MySQL server
npm i mysql --save
- update the user migration file with firstname, lastname and phone field. We also need to remove the username field.
class UserSchema extends Schema {
up() {
this.create('users', (table) => {
table.increments()
table.string('firstname', 80).notNullable()
table.string('lastname', 80).notNullable()
table.string('email', 254).notNullable().unique()
table.string('password', 60).notNullable()
table.string('phone', 40).notNullable().unique()
table.timestamps()
})
}
down() {
this.drop('users')
}
}
- update the .env file to what is shown below
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_USER=root DB_PASSWORD= DB_DATABASE=authsys_db
- update the database.js file in the config folder to the following
connection: Env.get('DB_CONNECTION', 'mysql'),
mysql: { client: 'mysql', connection: { host: Env.get('DB_HOST', 'localhost'), port: Env.get('DB_PORT', ''), user: Env.get('DB_USER', 'root'), password: Env.get('DB_PASSWORD', ''), database: Env.get('DB_DATABASE', 'authsys_db') }, debug: Env.get('DB_DEBUG', false) },
- run our migration
adonis migration:run
upon successful migration, we should have something that looks like this below
$ adonis migration:run migrate: 1503250034279_user.js migrate: 1503250034280_token.js Database migrated successfully in 2.03 s
the MySQL workbench should also look like this upon successful migration
Summary
In this tutorial, we learnt about Adonis.Js and why you'll want to use it in your next project. we also learnt how to setup create our project using Adonis CLI. we were able to create a MySQL database and connect it to our project.
In the next part, we will create a signup and login controller and learn how to easily validate our input using Adonis.
Thank you for time and see you in the next section.
Top comments (2)
Is this a good thing?
Thanks for pointing this out..... I meant it reduces your development time.