UNPKG

login-auth-services

Version:

Authentication services for Google, GitHub, Microsoft, okta and multi-factor authentication using OTP.

227 lines (153 loc) 5.2 kB
# Login Auth Services ![npm](https://img.shields.io/npm/v/login-auth-services) ![license](https://img.shields.io/npm/l/login-auth-services) **Login Auth Services** is a robust authentication package supporting multiple OAuth providers (Google, GitHub, Microsoft, and Okta) with multi-factor authentication (OTP). It also includes a **sync-db** command to synchronize your database schema using **TypeORM**. ## 🚀 Features - 🔒 **OAuth Authentication** for: - Google - GitHub - Microsoft - Okta - 🔑 **Multi-Factor Authentication (MFA)** using One-Time Password (OTP) - 🛠 **Database Agnostic** - Works with **any** database supported by TypeORM - 🔄 **Database Synchronization** via `sync-db` command - 🔐 **JWT-based Authentication** - 📧 **Email verification & password reset** using Nodemailer - 📦 **Easily Integrates with Express.js** --- ## 📦 Installation Install via npm: ```sh npm install login-auth-services ``` or using yarn: ```sh yarn add login-auth-services ``` --- ## 📌 TypeORM & Database Setup This package uses **TypeORM** for database interactions. You can use **any** relational database (MySQL, PostgreSQL, SQLite, etc.). ### 1️⃣ Configure `database.config.ts` Create a `database.config.ts` file to configure TypeORM's **DataSource**: ```ts import { DataSource } from "typeorm"; import dotenv from "dotenv"; dotenv.config(); export const AppDataSource = new DataSource({ type: process.env.DATABASE_TYPE as any, host: process.env.DATABASE_HOST, port: Number(process.env.DATABASE_PORT), username: process.env.DATABASE_USERNAME, password: process.env.DATABASE_PASSWORD, database: process.env.DATABASE_NAME, synchronize: false, // Use sync-db instead logging: false, entities: ["src/entity/*.ts"], }); AppDataSource.initialize() .then(() => console.log("Database connected")) .catch((err) => console.error("Database connection failed", err)); ``` ### 2️⃣ Define Entities Entities define the database structure. Example `User` entity: ```ts import { Entity, PrimaryGeneratedColumn, Column } from "typeorm"; @Entity() export class User { @PrimaryGeneratedColumn() id: number; @Column() email: string; @Column() password: string; } ``` --- ## 🔄 Sync Database This package includes a `sync-db` command to synchronize your database schema with TypeORM entities. ### **Running sync-db** Run the following command to apply migrations and synchronize the database: ```sh npx sync-db ``` This will automatically update the database schema based on TypeORM entities. Ensure `synchronize` is **disabled** in `database.config.ts` to avoid conflicts. --- ## 🔑 Authentication Usage ### Google OAuth Login ```ts import { GoogleAuthService } from "login-auth-services"; const googleAuth = new GoogleAuthService({ clientId: "your-client-id", clientSecret: "your-client-secret", redirectUri: "your-redirect-uri", }); app.get("/auth/google", async (req, res) => { const url = googleAuth.getAuthUrl(); res.redirect(url); }); app.get("/auth/google/callback", async (req, res) => { const token = await googleAuth.getAccessToken(req.query.code); res.json(token); }); ``` ### GitHub OAuth Login ```ts import { GitHubAuthService } from "login-auth-services"; const githubAuth = new GitHubAuthService({ clientId: "your-client-id", clientSecret: "your-client-secret", redirectUri: "your-redirect-uri", }); app.get("/auth/github", async (req, res) => { const url = githubAuth.getAuthUrl(); res.redirect(url); }); app.get("/auth/github/callback", async (req, res) => { const token = await githubAuth.getAccessToken(req.query.code); res.json(token); }); ``` --- ## 📧 Email Verification & Password Reset ### Send Verification Email ```ts import { sendVerificationEmail } from "login-auth-services"; await sendVerificationEmail(user.email, user.verificationCode); ``` --- ## 📌 Custom Login Authentication ### Register User ```ts import { registerUser } from "login-auth-services"; const user = await registerUser({ email: "user@example.com", password: "securepassword", }); ``` ### Login User ```ts import { loginUser } from "login-auth-services"; const token = await loginUser({ email: "user@example.com", password: "securepassword", }); ``` ### Verify OTP for Multi-Factor Authentication ```ts import { verifyOTP } from "login-auth-services"; const isValid = await verifyOTP({ email: "user@example.com", otp: "123456", }); ``` --- ## 📜 License This project is licensed under the **MIT License** - see the [LICENSE](LICENSE) file for details. --- ## 🙌 Contributions Contributions, issues, and feature requests are welcome! Feel free to fork, submit PRs, or open issues on GitHub. --- ## 📝 Author **Harshil Patel** 📧 Email: [harshilpatel29072003@gmail.com] --- This README includes **TypeORM configuration**, **database synchronization with sync-db**, and **entity setup**.