Skip to content

Repository files navigation

🔐 Secure Authentication App

A simple Node.js application with PostgreSQL for secure user registration and login, using bcrypt for password hashing and EJS for templating.

📌 Table of Contents


✅ Features

  • User registration with hashed passwords using bcrypt
  • Login authentication with password comparison
  • Secure PostgreSQL integration with parameterized queries
  • Simple EJS frontend templates
  • Clear error handling and user feedback
  • smtp gmail service for verificatin,reset password e.tc

🧰 Tech Stack

  • Backend: Node.js, Express
  • Database: PostgreSQL
  • Templating Engine: EJS
  • Middleware: body-parser, morgan
  • Security: bcrypt

🚀 Getting Started

  1. Clone the repository:
git clone https://github.com/your-username/secure-auth-app.git
cd secure-auth-app
  1. Install dependencies:
npm install
  1. Create views/ folder and add these .ejs files:

    • index.ejs (homepage)
    • login.ejs (login form)
    • secrets.ejs (protected page after login)
  2. Start the development server:

node index.js

Server runs on http://localhost:3000


🧱 Database Setup

  1. Open PostgreSQL CLI or pgAdmin.
  2. Create a new database:
CREATEDATABASESecure;
  1. Create the users table:
CREATETABLEusers (
id SERIALPRIMARY KEY,
email VARCHAR(255) UNIQUE NOT NULL,
password TEXTNOT NULL
);

🌐 Available Routes

MethodRouteDescription
GET/Home page
GET/loginLogin form
POST/registerRegister new user
POST/user-loginAuthenticate existing user

📸 Screenshots

All screenshots are stored in the /screenshots/ folder.

🏠 Homepage - /

Homepage


🔐 Login Page - /login

Login Page


📝 Register Page - /register

Register Page


🎉 Secrets Page - After Successful Login

Secrets Page


📁 Project Structure

secure-auth-app/
├── views/
│ ├── index.ejs
│ ├── login.ejs
│ └── secrets.ejs
├── screenshots/
│ ├── homepage.png
│ ├── login.png
│ ├── register.png
│ └── secrets.png
├── index.js
├── package.json
└── README.md

🔐 Security Notes

  • Passwords are hashed using bcrypt with 12 salt rounds.
  • SQL queries use parameterized values to prevent SQL injection.
  • In production, database credentials should not be hardcoded. Use environment variables and dotenv.

📦 Example .env File

DB_USER=postgres
DB_HOST=localhost
DB_NAME=Secure
DB_PASS=your_password
DB_PORT=5432

Then in index.js, use:

importdotenvfrom"dotenv";dotenv.config();constdb=newpg.Client({user: process.env.DB_USER,host: process.env.DB_HOST,database: process.env.DB_NAME,password: process.env.DB_PASS,port: process.env.DB_PORT});

📜 License

This project is licensed under the MIT License.
Feel free to use, modify, and share.


👨‍💻 Author

Erick Olando
🎓 Meteorologist & 💻 Software Developer
📫 Email: erickolando98@gmail.com
🔗 GitHub | LinkedIn

About

Secure auth system with PostgreSQL, bcrypt, Gmail SMTP for email verification, password reset, and forgot password flows.

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages