echo-tutor / auth_module /README.md
Nanny7's picture
feat: replace auth module with updated Nova bridge and wire auth UI
dbfeb5e
|
Raw History Blame Contribute Delete
3.37 kB

๐Ÿ” RobovAI Auth Module โ€” Standalone Package

ู†ุธุงู… ุชุณุฌูŠู„ + ุชุณุฌูŠู„ ุฏุฎูˆู„ + ุชูุนูŠู„ ุนุจุฑ Telegram OTP โ€” ุฌุงู‡ุฒ ู„ู„ู†ู‚ู„ ู„ุฃูŠ ุชุทุจูŠู‚ FastAPI. ูŠุฏุนู… ุงู„ุจูˆุช ุงู„ู…ุฑูƒุฒูŠ (@robovainova_bot) ุนู„ู‰ ุณูŠุฑูุฑ ู…ุฎุชู„ู ุนุจุฑ Nova API.

ุงู„ู…ู„ูุงุช

ู…ู„ู ุงู„ูˆุธูŠูุฉ
security.py JWT tokens, password hashing, password validation
database.py SQLite: users, sessions, OTP, CRUD
auth_routes.py FastAPI routes: signup, login, logout, OTP, verify, me
nova_client.py HTTP client โ€” pushes OTP to Nova for Telegram bot delivery
telegram_verify.py (ุงุฎุชูŠุงุฑูŠ) Telegram bot ู…ุณุชู‚ู„ ู„ู„ุชูุนูŠู„
config.py Settings / environment variables
models.py Pydantic request/response models

ุงู„ุงุณุชุฎุฏุงู… ุงู„ุณุฑูŠุน (ุณูŠุฑูุฑ ู…ุฎุชู„ู + ุจูˆุช ู…ุฑูƒุฒูŠ)

# main.py
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from auth_module.auth_routes import auth_router, get_current_user

app = FastAPI(title="My App")

app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

# Auth routes: /auth/signup, /auth/login, /auth/logout, /auth/me, etc.
app.include_router(auth_router, prefix="/auth", tags=["Auth"])

# Your app routes...
@app.get("/")
def root():
    return {"app": "running"}

ุงู„ูู„ูˆ

1. ุงู„ู…ุณุชุฎุฏู… ูŠุนู…ู„ signup โ†’ POST /auth/signup
2. auth_module ูŠูˆู„ู‘ุฏ OTP โ†’ ูŠุฎุฒู†ู‡ ู…ุญู„ูŠุงู‹ + ูŠุจุนุชู‡ ู„ู€ Nova API
3. ุงู„ู…ุณุชุฎุฏู… ูŠุฑูˆุญ @robovainova_bot โ†’ /verify โ†’ ูŠุฏุฎู„ ุฅูŠู…ูŠู„ู‡
4. ุงู„ุจูˆุช ูŠู„ุงู‚ูŠ ุงู„ู€ OTP โ†’ ูŠุจุนุชู‡ูˆู„ู‡ ุนุจุฑ ุชู„ูŠุฌุฑุงู…
5. ุงู„ู…ุณุชุฎุฏู… ูŠุฏุฎู„ ุงู„ู€ OTP ููŠ ุงู„ู…ูˆู‚ุน โ†’ POST /auth/verify-otp
6. ุงู„ุญุณุงุจ ูŠุชูุนู‘ู„ โœ…

ุงู„ู…ุชุทู„ุจุงุช

fastapi>=0.100.0
uvicorn[standard]
pyjwt>=2.8.0
passlib[bcrypt]>=1.7.4
pydantic-settings>=2.0.0
python-dotenv>=1.0.0
python-multipart>=0.0.6
httpx>=0.25.0

ุงู„ุจูŠุฆุฉ (.env)

# ู…ุทู„ูˆุจ โ€” JWT Secret
JWT_SECRET_KEY=your-secret-key-min-32-chars

# ู…ุทู„ูˆุจ โ€” ุฑุจุท ุจุงู„ุจูˆุช ุงู„ู…ุฑูƒุฒูŠ
NOVA_API_URL=https://robovai-nova.onrender.com
NOVA_API_KEY=nova_ext_9f3k7Lm2Xp8qR4vW6yB1cD5eH0jN
APP_ID=my-new-app

# ุงุฎุชูŠุงุฑูŠ
DATABASE_PATH=users.db

ู…ู„ุงุญุธุฉ: ุงู„ู€ NOVA_API_KEY ู„ุงุฒู… ูŠูƒูˆู† ู†ูุณ ุงู„ู‚ูŠู…ุฉ ุงู„ู…ูˆุฌูˆุฏุฉ ููŠ EXTERNAL_API_KEY ุนู„ู‰ ุณูŠุฑูุฑ Nova.

Signup Page JavaScript Example

// After successful signup, poll for verification
async function pollVerification(email) {
    const interval = setInterval(async () => {
        const res = await fetch(`/auth/check-verified?email=${email}`);
        const data = await res.json();
        if (data.verified) {
            clearInterval(interval);
            alert("โœ… ุชู… ุชูุนูŠู„ ุญุณุงุจูƒ!");
            window.location.href = "/login";
        }
    }, 3000); // Poll every 3 seconds
}