mirror of
				https://github.com/fastapi-users/fastapi-users.git
				synced 2025-11-01 01:48:46 +08:00 
			
		
		
		
	Implement password validation mechanism (#632)
* Implement password validation mechanism * Add invalid password reason * Always pass user in password validator * Add password validation documentation
This commit is contained in:
		| @ -30,7 +30,7 @@ def after_register(request): | ||||
| @pytest.fixture | ||||
| @pytest.mark.asyncio | ||||
| async def test_app_client( | ||||
|     mock_user_db, after_register, get_test_client | ||||
|     mock_user_db, after_register, get_test_client, validate_password | ||||
| ) -> AsyncGenerator[httpx.AsyncClient, None]: | ||||
|     create_user = get_create_user(mock_user_db, UserDB) | ||||
|     register_router = get_register_router( | ||||
| @ -38,6 +38,7 @@ async def test_app_client( | ||||
|         User, | ||||
|         UserCreate, | ||||
|         after_register, | ||||
|         validate_password, | ||||
|     ) | ||||
|  | ||||
|     app = FastAPI() | ||||
| @ -79,6 +80,22 @@ class TestRegister: | ||||
|         assert response.status_code == status.HTTP_422_UNPROCESSABLE_ENTITY | ||||
|         assert after_register.called is False | ||||
|  | ||||
|     async def test_invalid_password( | ||||
|         self, test_app_client: httpx.AsyncClient, after_register, validate_password | ||||
|     ): | ||||
|         json = {"email": "king.arthur@camelot.bt", "password": "g"} | ||||
|         response = await test_app_client.post("/register", json=json) | ||||
|         assert response.status_code == status.HTTP_400_BAD_REQUEST | ||||
|         data = cast(Dict[str, Any], response.json()) | ||||
|         assert data["detail"] == { | ||||
|             "code": ErrorCode.REGISTER_INVALID_PASSWORD, | ||||
|             "reason": "Password should be at least 3 characters", | ||||
|         } | ||||
|         validate_password.assert_called_with( | ||||
|             "g", UserCreate(email="king.arthur@camelot.bt", password="g") | ||||
|         ) | ||||
|         assert after_register.called is False | ||||
|  | ||||
|     @pytest.mark.parametrize( | ||||
|         "email", ["king.arthur@camelot.bt", "King.Arthur@camelot.bt"] | ||||
|     ) | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 François Voron
					François Voron