소스 검색

[REF-1741] Disallow routes with /api prefix (#2711)

Masen Furer 1 년 전
부모
커밋
350a051a45
2개의 변경된 파일26개의 추가작업 그리고 0개의 파일을 삭제
  1. 4 0
      reflex/route.py
  2. 22 0
      tests/test_app.py

+ 4 - 0
reflex/route.py

@@ -19,6 +19,10 @@ def verify_route_validity(route: str) -> None:
     pattern = catchall_in_route(route)
     if pattern and not route.endswith(pattern):
         raise ValueError(f"Catch-all must be the last part of the URL: {route}")
+    if route == "api" or route.startswith("api/"):
+        raise ValueError(
+            f"Cannot have a route prefixed with 'api/': {route} (conflicts with NextJS)"
+        )
 
 
 def get_route_args(route: str) -> dict[str, str]:

+ 22 - 0
tests/test_app.py

@@ -275,6 +275,28 @@ def test_add_page_set_route_nested(app: App, index_page, windows_platform: bool)
     assert set(app.pages.keys()) == {route.strip(os.path.sep)}
 
 
+def test_add_page_invalid_api_route(app: App, index_page):
+    """Test adding a page with an invalid route to an app.
+
+    Args:
+        app: The app to test.
+        index_page: The index page.
+    """
+    with pytest.raises(ValueError):
+        app.add_page(index_page, route="api")
+    with pytest.raises(ValueError):
+        app.add_page(index_page, route="/api")
+    with pytest.raises(ValueError):
+        app.add_page(index_page, route="/api/")
+    with pytest.raises(ValueError):
+        app.add_page(index_page, route="api/foo")
+    with pytest.raises(ValueError):
+        app.add_page(index_page, route="/api/foo")
+    # These should be fine
+    app.add_page(index_page, route="api2")
+    app.add_page(index_page, route="/foo/api")
+
+
 def test_initialize_with_admin_dashboard(test_model):
     """Test setting the admin dashboard of an app.