|
1 | 1 | import contextlib
|
2 |
| -from typing import Any, Callable, Dict, List, Type |
| 2 | +from typing import Any, Callable, Dict, List, Type, Union |
3 | 3 |
|
4 | 4 | from fastapi import Depends, HTTPException
|
5 | 5 | from fastapi_amis_admin.admin import (
|
|
29 | 29 | from fastapi_amis_admin.crud.schema import BaseApiOut
|
30 | 30 | from fastapi_amis_admin.utils.pydantic import model_fields
|
31 | 31 | from fastapi_amis_admin.utils.translation import i18n as _
|
32 |
| -from pydantic import BaseModel |
| 32 | +from pydantic import BaseModel, SecretStr |
33 | 33 | from sqlalchemy import select
|
34 | 34 | from sqlmodel.sql.expression import Select
|
35 | 35 | from starlette import status
|
@@ -307,15 +307,21 @@ class UserAdmin(AuthFieldModelAdmin, AuthSelectModelAdmin, SoftDeleteModelAdmin,
|
307 | 307 |
|
308 | 308 | async def on_create_pre(self, request: Request, obj, **kwargs) -> Dict[str, Any]:
|
309 | 309 | data = await super(UserAdmin, self).on_create_pre(request, obj, **kwargs)
|
310 |
| - data["password"] = request.auth.pwd_context.hash(data["password"]) # 密码hash保存 |
| 310 | + data["password"] = self.get_password_hash(request, data["password"]) |
311 | 311 | return data
|
312 | 312 |
|
313 | 313 | async def on_update_pre(self, request: Request, obj, item_id: List[int], **kwargs) -> Dict[str, Any]:
|
314 | 314 | data = await super(UserAdmin, self).on_update_pre(request, obj, item_id, **kwargs)
|
315 |
| - if data.get("password"): |
316 |
| - data["password"] = request.auth.pwd_context.hash(data["password"]) # 密码hash保存 |
| 315 | + if data.get("password", None): |
| 316 | + data["password"] = self.get_password_hash(request, data["password"]) |
317 | 317 | return data
|
318 | 318 |
|
| 319 | + @staticmethod |
| 320 | + def get_password_hash(request: Request, password: Union[str, SecretStr]) -> str: |
| 321 | + if isinstance(password, SecretStr): |
| 322 | + password = password.get_secret_value() |
| 323 | + return request.auth.pwd_context.hash(password) # 密码hash保存 |
| 324 | + |
319 | 325 |
|
320 | 326 | class RoleAdmin(AutoTimeModelAdmin, FootableModelAdmin):
|
321 | 327 | unique_id = "Auth>RoleAdmin"
|
|
0 commit comments