Sails Backend for Angular2+ Auth
This post is intending to demonstrate securing angular 2+ single page application post here
We are going to use sails to create our quick apis , before we begin, make sure you have node installed.
Our api is going to be using mysql or mongo db any of the database you have installed, you can head over to their respective sites to learn how to get any installed.
Now let’s get to setting up our sails node api backend. Open up your terminal and type the following
npm install sails -g
Yeahhhh sails is installed on our local machine, we move to creating our sails application by typing the below command
sails new server-api — no-frontend
our folder should be cooking with our sails components. After the cooking our server-api folder should be ready, just do
sails lift
which should give us something like this
so our api is working Hurrayyy!!!. Now we need to install dependencies we are going to create our api
npm install bcryptjs — save
That above command is for hashing password. The next is for our json web token based authentication
npm install jsonwebtoken — save
The last one is for handling validation like errors
npm install sails-hook-validation — save
Creating models which is like our database table from mysql view or collections in mongodb, since we are dealing with creating authentication backend we won’t dive much into sails, now we create our user model, easy to do by using the following command
sails generate api user
that should help us create the user model and userController under api/models and api/controllers respectively. We move to our user.js model file to create our fields that the user is going to hold. So it should finally look like this
Now that our user mode is done, we can perform general blueprint actions like post, get, delete and put on it from our frontend. Note you can use policies to block which is required to be public or requires some special authentication. Now we are going to just make it opened.
Now let’s create our api methods for
- Login: uses the email and password sent through request body to perform login
- Token: helps to refresh our token from the initial token sent from the request header and return a newer token
Let’s move on to userController.js under the api/controllers folder and create the above logics, it should look like this now
Before we start to consume our service let’s create our policy to handle Authentication checking for our token. Under the api/policies folder create a file called isAuth.js
NB: You can create a services/config.js file to hold our secret key for our jsonwebtoken library.
Let’s make use of this policy now on our user controller edit, delete, update blueprint. Open up config/policies.js
and make it like the one below
finally, we need to create our api route for login and token on our config/routes.js
like so
Yeaaa we are done, let’s open up postman to test our api. Oh we need to handle which database to use with our api (mysql or mongodb). If you have mysql on your system you can do this below
npm install sails-mysql — save
For mongo db we install this adapter
npm install sails-mongo — save
Open up your config/connection.js and do this
For mysql:
authApiMysql: {
adapter: 'sails-mysql',
host: 'localhost',
user: 'root', //optional
password: 'root', //optional
database: 'testAuthDB'
},
For mongo:
authApiMongo: {
adapter: 'sails-mongo',
host: 'localhost',
port: 27017,
database: 'testAuthDB'
},
Now depending on your database open up config/models.js. For mysql
connection: ‘authApiMysql’
For mongo
connection: ‘authApiMongo’
then migrate: ‘alter’
Now sails lift
again, you will see your database has been created with the models created as tables or collections.
If you having this error below
error: Error (E_UNKNOWN) :: Encountered an unexpected error
: Could not connect to MySQL:
Error: ER_BAD_DB_ERROR: Unknown database ‘testauthdb’
Then goto your database console to create ‘testauthdb’ for mysql users.
Postman we are here, open it up and send a post request to http://localhost:1337/user, passing email, name, password, like so
now we have created our user, next is to try the login now with the created parameters
Let’s test our token api if its creates or refresh our api for us since it expires every 10 mins before 10mins we refresh with the older token using header like so
So we are good to return to our Angular2+ single page authentication post, but before we go one last thing is to checkout for this file config/cors.js when having cors issue connecting to our backend from our frontend server updating the file to be like this should help out
Restart sails and all good to go.
Check releases(tags) for different features added.