Я строю пользовательную аутентификацию с аутентификацией Firebase (вход Google) на Frontend (HTML, CSS, JS) и используя бэкэнд FastApi для проверки токенов. /> в стороне Fastapi
main.py
Код: Выделить всё
app = FastAPI()
app.add_middleware(
CORSMiddleware,
allow_origins=["http://localhost:8080"], # your frontend origin
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],)
@app.middleware("http")
async def add_custom_headers(request: Request, call_next):
response: Response = await call_next(request)
response.headers["Cross-Origin-Opener-Policy"] = "same-origin"
#response.headers["Cross-Origin-Embedder-Policy"] = "require-corp"
response.headers["Cross-Origin-Resource-Policy"] = "cross-origin"
return response
app.include_router(api_router)
app.mount("/static", StaticFiles(directory="static"), name="static")
< /code>
in auth_router.py < /p>
router = APIRouter()
security=HTTPBearer()
# init firebase
cred = credentials.Certificate('/workspace/draftflow-b7b11-firebase-adminsdk-fbsvc-77f9fcd8a6.json')
firebase_admin.initialize_app(cred)
@router.get("/verify-token")
def verify_token(credentials: HTTPAuthorizationCredentials = Depends(security)):
try:
# decode and verify the token
decoded_token = auth.verify_id_token(credentials.credentials)
uid = decoded_token.get("uid")
email = decoded_token.get("email")
name = decoded_token.get("name")
return {
"status": "success",
"uid": uid,
"email": email,
"name": name
}
except Exception as e:
print("Token verification failed:", e)
raise HTTPException(status_code=401, detail="Invalid token")
< /code>
На передней стороне
in auth.html Я использую firebaseauth.js < /p>
// firebase config is initialized
const app = initializeApp(firebaseConfig);
const auth = getAuth(app);
auth.languageCode = "en";
const db = getFirestore(app);
const googleProvider = new GoogleAuthProvider();
function handleRedirectResult(){
getRedirectResult(auth)
.then(async (result) => {
// If no result (user canceled sign-in), exit early
if (!result) {
console.log("No redirect result.");
return;
}
const credential = GoogleAuthProvider.credentialFromResult(result);
const token = credential.accessToken;
const user = result.user;
const idToken = await user.getIdToken();
localStorage.setItem("jwtID", idToken);
window.location.href = "/home";
})
.catch((error)=>{
console.log('Error handnling reidrect result: ', error);
})
}
function signInWithGoogle() {
signInWithRedirect(auth, googleProvider)
.catch((error) => {
console.error('Error during sign in:', error);
//handleAuthError(error);
});
}
// ✅ Google Sign-in Button Listener
document.addEventListener('DOMContentLoaded', ()=>{
handleRedirectResult();
const googleBtn = document.getElementById("googleLoginBtn");
if (googleBtn) {
googleBtn.addEventListener("click", signInWithGoogle);
}
});
app.include_router(auth_router, prefix="/auth", tags=["Authentication"])
< /code>
Firebase Перенаправление на страницу Google Signin, когда я регистрируюсь, используя мой Google Aoount It Redirect на одну и ту же страницу Auth. FASTAPI + Firebase Admin SDK
Я пробовал различные методы решения, но ничего не сработало.
Подробнее здесь: https://stackoverflow.com/questions/796 ... er-sign-in
Мобильная версия