From 15d12a735449cf8ec5d5f7e8a77c99852306963a Mon Sep 17 00:00:00 2001 From: feijooso Date: Mon, 19 Feb 2024 02:01:13 -0300 Subject: [PATCH] get user info after login --- app/main.py | 6 ++++-- app/repository/Users.py | 2 +- app/schemas/Schemas.py | 4 ++++ app/service/Users.py | 8 ++++++-- 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/app/main.py b/app/main.py index 258f2ba..6e79456 100644 --- a/app/main.py +++ b/app/main.py @@ -1,8 +1,10 @@ from fastapi import FastAPI +from fastapi import Body from controller.Users import UsersController from service.Users import UsersService from repository.Users import UsersRepository from schemas.Schemas import CreateUserSchema +from schemas.Schemas import LoginRequest app = FastAPI() @@ -32,5 +34,5 @@ async def create_user(user_data: CreateUserSchema): @app.post("/login") -def login_with_google(auth_code: str): - return users_controller.handle_login(auth_code) +def login_with_google(req: LoginRequest = Body(...)): + return users_controller.handle_login(req.auth_code) diff --git a/app/repository/Users.py b/app/repository/Users.py index 68f43f3..0ce863c 100644 --- a/app/repository/Users.py +++ b/app/repository/Users.py @@ -43,7 +43,7 @@ def create_user(self, name: str): new_user = User(name=name) self.session.add(new_user) self.session.commit() - return + return new_user def __parse_result(self, result): if not result: diff --git a/app/schemas/Schemas.py b/app/schemas/Schemas.py index 1d978e4..b8943d9 100644 --- a/app/schemas/Schemas.py +++ b/app/schemas/Schemas.py @@ -8,3 +8,7 @@ class UserSchema(BaseModel): class CreateUserSchema(BaseModel): name: str + + +class LoginRequest(BaseModel): + auth_code: str diff --git a/app/service/Users.py b/app/service/Users.py index b16926c..3d2a7df 100644 --- a/app/service/Users.py +++ b/app/service/Users.py @@ -3,6 +3,7 @@ import requests import os + def get_access_token(authorization_code): token_url = "https://oauth2.googleapis.com/token" payload = { @@ -22,7 +23,8 @@ def get_access_token(authorization_code): def get_user_info(access_token): user_info_url = "https://www.googleapis.com/oauth2/v2/userinfo" headers = {"Authorization": f"Bearer {access_token}"} - response = requests.get(user_info_url, headers=headers) + params = {"fields": "id,email,name,picture"} + response = requests.get(user_info_url, headers=headers, params=params) if response.status_code == 200: return response.json() else: @@ -52,4 +54,6 @@ def login(self, auth_code: str): user = self.user_repository.get_user_by_name(user_info["email"]) if user is None: - self.user_repository.create_user(user_info["email"]) + user = self.user_repository.create_user(user_info["email"]) + + return user