Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/edmartt/go-authentication-api
Authentication API developed in Go language
https://github.com/edmartt/go-authentication-api
api-rest go golang jwt microservice solid-principles vertical-slice-architecture webservice
Last synced: about 1 month ago
JSON representation
Authentication API developed in Go language
- Host: GitHub
- URL: https://github.com/edmartt/go-authentication-api
- Owner: Edmartt
- Created: 2022-05-05T10:03:58.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2024-03-14T21:55:00.000Z (8 months ago)
- Last Synced: 2024-10-02T09:14:18.937Z (about 1 month ago)
- Topics: api-rest, go, golang, jwt, microservice, solid-principles, vertical-slice-architecture, webservice
- Language: Go
- Homepage:
- Size: 185 KB
- Stars: 6
- Watchers: 1
- Forks: 5
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# go-authentication-api
A simple authentication API.
### What you can do:
- add new users
- sign in with your user when is already registered
- get a JWT if authentication is successful## Running Locally
```
git clone https://github.com/Edmartt/go-authentication-api
```or ssh instead:
```
[email protected]:Edmart/go-authentication-api
``````
cd go-authentication-api
``````
go mod tidy
``````
go run main.go
```## Using
**Note**
This is actually set for using with SQLite for simplicity, but you can switch this database manager for postgres if needed. Just go to internal/users/data/repository.go and change the line 10 typing **Postgres**. If you use postgres, remember to set the .env.example values according to your setup. Note that I left the `:` as part of HTTP_PORT env var value, so if you need to change this port just delete the numbers.
You can use any client you want. I'm using curl:
```
curl -i -X POST -H "Content-Type: application/json" -d '{"username":"shinigami", "password":"12345678"}' http://:/api/v1/public/signup
```#### Response:
```
HTTP/1.1 201 Created
Content-Type: application/json
Date: Sun, 29 May 2022 06:24:41 GMT
Content-Length: 26{"status":"User Created"}
```Once the user is created you can sign in:
```
curl -i -X POST -H "Content-Type: application/json" -d '{"username":"shinigami", "password":"12345678"}' http://:/api/v1/public/login
```#### Response:
```
HTTP/1.1 200 OK
Content-Type: application/json
Date: Sun, 29 May 2022 06:25:17 GMT
Content-Length: 176{"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NTM4MDU4MTcsImlzcyI6IlNhbSBTZXBpb2wiLCJBdHRyaWJ1dGUiOiJzaGluaWdhbWkifQ.CdEL0FqZxOHAit5C6zfpcX2HuhLESDpwcKQSzlowm2s"}
```After obtaining the token, we can send it to a special endpoint that will give us the user's data as a response.
```
curl -i -H "Content-Type: application/json" -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NTM4MDU4MTcsImlzcyI6IlNhbSBTZXBpb2wiLCJBdHRyaWJ1dGUiOiJzaGluaWdhbWkifQ.CdEL0FqZxOHAit5C6zfpcX2HuhLESDpwcKQSzlowm2s" http:///a
pi/v1/private/users/user
```#### Response
```
HTTP/1.1 200 OK
Content-Type: application/json
Date: Sun, 29 May 2022 17:44:38 GMT
Content-Length: 201{"id":"02a542e5-fbd8-46ae-b0dd-7043bb226c9f","username":"shinigami","password":"","ID":0,"CreatedAt":"2022-05-05T07:25:37.560142-05:00","UpdatedAt":"2022-05-05T07:25:37.560142-05:00","DeletedAt":null}
```**Note:** The password is already hashed but even like that, we don't want to expose our password hash
## Running Unit Test
```
go test -v -coverprofile=coverage.out ./... ./...
```## Showing Coverage in Browser
```
go tool cover -html=coverage.out
```## DEMO
A demo application is deployed here:
- [demo app](https://go-authentication-api.azurewebsites.net)