## Is your feature request related to a problem?

It's possible to brute-force passwords if you're particularly determined

## Describe the solution you'd like

Install `django-axes`: https://django-axes.readthedocs.io/en/latest/2_installation.html


## Describe alternatives you've considered



## Additional context



#### *Thank you* for your feature request – we love each and every one!

posthog/api/test/test_capture.py
response = self.client.post(
            "/batch/",
            data={"batch": [{"type": "capture", "event": "user signed up", "distinct_id": "whatever",},]},
            content_type="application/json",
        )
        self.assertEqual(response.status_code, 400)
        self.assertEqual(
            response.json()["message"],
            "Neither api_key nor personal_api_key set. You can find your project API key in PostHog project settings.",
        )
    def test_batch_distinct_id_not_set(self):
        response = self.client.post(
            "/batch/",
            data={"api_key": self.team.api_token, "batch": [{"type": "capture", "event": "user signed up",},],},
            content_type="application/json",
        )
        self.assertEqual(response.status_code, 400)
        self.assertEqual(response.json()["message"], "You need to set user distinct ID field `distinct_id`.")
    @patch("posthog.models.team.TEAM_CACHE", {})
    @patch("posthog.api.capture.celery_app.send_task")
    def test_engage(self, patch_process_event_with_plugins):