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.
- 🔒 OAuth Authentication for:
- 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
Install via npm:
npm install login-auth-services
or using yarn:
yarn add login-auth-services
This package uses TypeORM for database interactions. You can use any relational database (MySQL, PostgreSQL, SQLite, etc.).
Create a database.config.ts
file to configure TypeORM's DataSource:
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));
Entities define the database structure. Example User
entity:
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
email: string;
@Column()
password: string;
}
This package includes a sync-db
command to synchronize your database schema with TypeORM entities.
Run the following command to apply migrations and synchronize the database:
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.
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);
});
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);
});
import { sendVerificationEmail } from "login-auth-services";
await sendVerificationEmail(user.email, user.verificationCode);
import { registerUser } from "login-auth-services";
const user = await registerUser({
email: "user@example.com",
password: "securepassword",
});
import { loginUser } from "login-auth-services";
const token = await loginUser({
email: "user@example.com",
password: "securepassword",
});
import { verifyOTP } from "login-auth-services";
const isValid = await verifyOTP({
email: "user@example.com",
otp: "123456",
});
This project is licensed under the MIT License - see the LICENSE file for details.
Contributions, issues, and feature requests are welcome! Feel free to fork, submit PRs, or open issues on GitHub.
Harshil Patel
📧 Email: [harshilpatel29072003@gmail.com]
This README includes TypeORM configuration, database synchronization with sync-db, and entity setup.