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 |
## ุงู„ุงุณุชุฎุฏุงู… ุงู„ุณุฑูŠุน (ุณูŠุฑูุฑ ู…ุฎุชู„ู + ุจูˆุช ู…ุฑูƒุฒูŠ)
```python
# 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)
```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
```javascript
// 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
}
```