I am using a library called fastapi users for user authentication it's working fine but can't add extra field like they shown here
I used this example with sql alchemy Here is my code
import uuid
from fastapi_users import schemas, models
from typing import List, Optional
import datetime
from fastapi import Request
class UserRead(schemas.BaseUser[uuid.UUID]):
pass
class UserCreate(schemas.BaseUserCreate):
first_name: str
class UserUpdate(schemas.BaseUserUpdate):
# name: Optional[str]
pass
Getting the error which says TypeError: 'first_name' is an invalid keyword argument for User
This is the route
app.include_router(fastapi_users.get_register_router(UserRead, UserCreate), prefix="/auth", tags=["auth"],)
The function of that route
def get_register_router(
self, user_schema: Type[schemas.U], user_create_schema: Type[schemas.UC]
) -> APIRouter:
"""
Return a router with a register route.
:param user_schema: Pydantic schema of a public user.
:param user_create_schema: Pydantic schema for creating a user.
"""
return get_register_router(
self.get_user_manager, user_schema, user_create_schema
)
And this is get register router
def get_register_router(
get_user_manager: UserManagerDependency[models.UP, models.ID],
user_schema: Type[schemas.U],
user_create_schema: Type[schemas.UC],
) -> APIRouter:
"""Generate a router with the register route."""
router = APIRouter()
@router.post(
"/register",
response_model=user_schema,
status_code=status.HTTP_201_CREATED,
name="register:register",
responses={
status.HTTP_400_BAD_REQUEST: {
"model": ErrorModel,
"content": {
"application/json": {
"examples": {
ErrorCode.REGISTER_USER_ALREADY_EXISTS: {
"summary": "A user with this email already exists.",
"value": {
"detail": ErrorCode.REGISTER_USER_ALREADY_EXISTS
},
},
ErrorCode.REGISTER_INVALID_PASSWORD: {
"summary": "Password validation failed.",
"value": {
"detail": {
"code": ErrorCode.REGISTER_INVALID_PASSWORD,
"reason": "Password should be"
"at least 3 characters",
}
},
},
}
}
},
},
},
)
async def register(
request: Request,
user_create: user_create_schema, # type: ignore
user_manager: BaseUserManager[models.UP, models.ID] = Depends(get_user_manager),
):
try:
created_user = await user_manager.create(
user_create, safe=True, request=request
)
except exceptions.UserAlreadyExists:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail=ErrorCode.REGISTER_USER_ALREADY_EXISTS,
)
except exceptions.InvalidPasswordException as e:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail={
"code": ErrorCode.REGISTER_INVALID_PASSWORD,
"reason": e.reason,
},
)
return user_schema.from_orm(created_user)
return router
Error:
INFO: 127.0.0.1:58852 - "POST /auth/register HTTP/1.1" 500 Internal Server Error
ERROR: Exception in ASGI application
Traceback (most recent call last):
File "/home/shayon/.local/lib/python3.8/site-packages/uvicorn/protocols/http/httptools_impl.py", line 401, in run_asgi
result = await app(self.scope, self.receive, self.send)
File "/home/shayon/.local/lib/python3.8/site-packages/uvicorn/middleware/proxy_headers.py", line 78, in __call__
return await self.app(scope, receive, send)
File "/home/shayon/.local/lib/python3.8/site-packages/fastapi/applications.py", line 269, in __call__
await super().__call__(scope, receive, send)
File "/home/shayon/.local/lib/python3.8/site-packages/starlette/applications.py", line 124, in __call__
await self.middleware_stack(scope, receive, send)
File "/home/shayon/.local/lib/python3.8/site-packages/starlette/middleware/errors.py", line 184, in __call__
raise exc
File "/home/shayon/.local/lib/python3.8/site-packages/starlette/middleware/errors.py", line 162, in __call__
await self.app(scope, receive, _send)
File "/home/shayon/.local/lib/python3.8/site-packages/starlette/middleware/cors.py", line 92, in __call__
await self.simple_response(scope, receive, send, request_headers=headers)
File "/home/shayon/.local/lib/python3.8/site-packages/starlette/middleware/cors.py", line 147, in simple_response
await self.app(scope, receive, send)
File "/home/shayon/.local/lib/python3.8/site-packages/starlette/exceptions.py", line 93, in __call__
raise exc
File "/home/shayon/.local/lib/python3.8/site-packages/starlette/exceptions.py", line 82, in __call__
await self.app(scope, receive, sender)
File "/home/shayon/.local/lib/python3.8/site-packages/fastapi/middleware/asyncexitstack.py", line 21, in __call__
raise e
File "/home/shayon/.local/lib/python3.8/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
await self.app(scope, receive, send)
File "/home/shayon/.local/lib/python3.8/site-packages/starlette/routing.py", line 670, in __call__
await route.handle(scope, receive, send)
File "/home/shayon/.local/lib/python3.8/site-packages/starlette/routing.py", line 266, in handle
await self.app(scope, receive, send)
File "/home/shayon/.local/lib/python3.8/site-packages/starlette/routing.py", line 65, in app
response = await func(request)
File "/home/shayon/.local/lib/python3.8/site-packages/fastapi/routing.py", line 227, in app
raw_response = await run_endpoint_function(
File "/home/shayon/.local/lib/python3.8/site-packages/fastapi/routing.py", line 160, in run_endpoint_function
return await dependant.call(**values)
File "/home/shayon/.local/lib/python3.8/site-packages/fastapi_users/router/register.py", line 57, in register
created_user = await user_manager.create(
File "/home/shayon/.local/lib/python3.8/site-packages/fastapi_users/manager.py", line 143, in create
created_user = await self.user_db.create(user_dict)
File "/home/shayon/.local/lib/python3.8/site-packages/fastapi_users_db_sqlalchemy/__init__.py", line 129, in create
user = self.user_table(**create_dict)
File "<string>", line 4, in __init__
File "/home/shayon/.local/lib/python3.8/site-packages/sqlalchemy/orm/state.py", line 482, in _initialize_instance
manager.dispatch.init_failure(self, args, kwargs)
File "/home/shayon/.local/lib/python3.8/site-packages/sqlalchemy/util/langhelpers.py", line 70, in __exit__
compat.raise_(
File "/home/shayon/.local/lib/python3.8/site-packages/sqlalchemy/util/compat.py", line 208, in raise_
raise exception
File "/home/shayon/.local/lib/python3.8/site-packages/sqlalchemy/orm/state.py", line 479, in _initialize_instance
return manager.original_init(*mixed[1:], **kwargs)
File "/home/shayon/.local/lib/python3.8/site-packages/sqlalchemy/orm/decl_base.py", line 1163, in _declarative_constructor
raise TypeError(
TypeError: 'first_name' is an invalid keyword argument for User