Get an Authentication system up and running with Go(Golang) in less than 30secs
Published: 2022-03-12 12:06:39

Good afternoon fellow developers, this is my first article on Dev.to and I am so excited about it.
Today I want to show you an alternative to getting a user authentication (sign-up and sign-in) up and running in Go(Golang) with just 3 lines of code. Sounds impossible right ? yeah I know but at the end of this article you would see that it is true and it works. you can check out the package on github [github.com/iqquee/auth](https://github.com/iqquee/auth) 

Now, lets get into the interesting stuffs. We would be capitalizing on a Go package I created which handles literally all the logic for a users sign-up and sign-in under the hood. The code base of the package is easy to read and understand as you can get to go through it. The good news is that you can have an authentication system up and running with just about 3 lines of code as we would see below.  The database used here is mongodb.

Init your Go mod with 

```
go mod init <your package name e.g github.com/<you username/<package name>>>
```
Download the package using 

```
go get github.com/iqquee/auth
```

Create a .env file and add this to it

```
DATABASE_NAME=<database name>
USER_COL=<collection name>
PORT=<port number>
SECRET_KEY=<secret key>
MongoDB_URI=<mondodb uri>
```

Download the Gin framework as we would be using it for routing with 

```
go get github.com/gin-gonic/gin
```
Create your main.go file

```
package main

import (
	"log"
	"os"

	"github.com/gin-gonic/gin"
	"github.com/iqquee/auth/auth"
	"github.com/joho/godotenv"
)

//func init runs before the main function
func init() {
	if err := godotenv.Load(); err != nil {
		log.Println("Error loading .env file")
	}
}
func main() {

	port := os.Getenv("PORT")
	if port == "" {
		port = "3000"
	}
	router := gin.Default()
	//user routes
	user := router.Group("user")
	{
		user.POST("/signup", auth.SignUp)
		user.POST("/signin", auth.SignIn)
	}
	router.Run(":" + port)
}
```

To test the endpoints you would have to start the server with 

```
go run main.go
```
and then on postman hit the signup endpoint with

```
127.0.0.1/user/signup
```
input the users information using the user model below

```
	First_Name    string             `json:"first_name"`
	Last_Name     string             `json:"last_name"`
	Email         string             `json:"email"`
	Phone_Number  int               `json:"phone_number"`
	Password      string             `json:"password"`
```
after inputting the users details then you can proceed to hit the signup endpoint with a POST request. Now there you have it, the user has been signup successfully.

You can also test the users sign-in endpoint with 

```
127.0.0.1/user/signin
```

then input the just created user email and password using model below

```
	Email         string             `json:"email"`
	Password      string             `json:"password"`
```
after inputting the users details then you can proceed to hit the signin endpoint with a POST request and the user has been signed in successfully.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z6vu54lgsap2ed6mdi5e.png)

It really is that easy and from what you can see above, you would realize that we only literally wrote just 3 lines of code which are :

```
"github.com/iqquee/auth/auth"
user.POST("/signup", auth.SignUp)
user.POST("/signin", auth.SignIn)
```
the first imported the package and the other two only called the sign-up and sign-in function from the package and attaching it to the endpoint.
I was excited creating this Go package and I hope you find it helpful.
Contributions to this package to further improve it is very much welcome as its open source and so just anyone can contribute to it.