def get_current_user(user_id: int):

get_current_user здесь получает user_id из query-параметра, а не из проверенной авторизации. Поэтому /users/me может вернуть чужого пользователя; Depends само по себе не проверяет личность.

Короткий ответ

Что ответить на собеседовании

get_current_user здесь получает user_id из query-параметра, а не из проверенной авторизации. Поэтому /users/me может вернуть чужого пользователя; Depends само по себе не проверяет личность.

Подробный разбор

Ответ с пояснениями

Условие

def get_current_user(user_id: int): user = users.get(user_id) if user is None: raise HTTPException(status_code=404, detail="User not found") return user

@app.get("/users", response_model=list[User]) def list_users(): return [User(*user) for user in users.list()]

@app.get("/users/me", response_model=User) def read_current_user(current_user: User = Depends(get_current_user)): return current_user

Ответ

get_current_user здесь получает user_id из query-параметра, а не из проверенной авторизации. Поэтому /users/me может вернуть чужого пользователя; Depends само по себе не проверяет личность.

Идентификатор текущего пользователя должен извлекаться из проверенного токена или серверной сессии, после чего запись загружается по этому ID. Для отсутствующей или неверной аутентификации нужен согласованный 401, а права на список пользователей проверяются отдельно. response_model валидирует ответ, но не авторизует запрос. Если User — Pydantic-модель, User(*user) обычно неверно: используют именованные данные или подходящую валидацию атрибутов. Точный способ зависит от того, что возвращает users.list(). Публичная схема ответа не должна раскрывать пароли и внутренние поля.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее