Initial commit: Tasteby - YouTube restaurant map service
Backend (FastAPI + Oracle ADB), Frontend (Next.js), daemon worker. Features: channel/video/restaurant management, semantic search, Google OAuth, user reviews. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
40
backend/api/routes/auth.py
Normal file
40
backend/api/routes/auth.py
Normal file
@@ -0,0 +1,40 @@
|
||||
"""Auth API routes — Google SSO login and user info."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from fastapi import APIRouter, Depends, HTTPException
|
||||
from pydantic import BaseModel
|
||||
|
||||
from core.auth import verify_google_token, find_or_create_user, create_jwt
|
||||
from api.deps import get_current_user
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
class GoogleLoginRequest(BaseModel):
|
||||
id_token: str
|
||||
|
||||
|
||||
@router.post("/google")
|
||||
def login_google(body: GoogleLoginRequest):
|
||||
"""Verify Google ID token and return JWT + user info."""
|
||||
try:
|
||||
google_info = verify_google_token(body.id_token)
|
||||
except ValueError as e:
|
||||
raise HTTPException(401, f"Invalid Google token: {e}")
|
||||
|
||||
user = find_or_create_user(
|
||||
provider="google",
|
||||
provider_id=google_info["sub"],
|
||||
email=google_info.get("email"),
|
||||
nickname=google_info.get("name"),
|
||||
avatar_url=google_info.get("picture"),
|
||||
)
|
||||
access_token = create_jwt(user)
|
||||
return {"access_token": access_token, "user": user}
|
||||
|
||||
|
||||
@router.get("/me")
|
||||
def get_me(current_user: dict = Depends(get_current_user)):
|
||||
"""Return current authenticated user info."""
|
||||
return current_user
|
||||
Reference in New Issue
Block a user