login-auth-services
Version:
Authentication services for Google, GitHub, Microsoft, okta and multi-factor authentication using OTP.
227 lines (153 loc) • 5.2 kB
Markdown
# 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**.