Django не может перенаправить на косую черту при сохранении данных POST (Microsoft Graph webhook) - PullRequest
0 голосов
/ 11 июня 2019

Я пытаюсь сделать веб-крючок для графа Microsoft. (документ здесь: https://docs.microsoft.com/en-us/graph/webhooks)

Однако, когда Microsoft Graph отправляет мне POST, он отправляет мне этот URL:

9d065f52.ngrok.io/api/v1.0/user-calendar-settings/calendar-webhook/?validationToken=Validation%3a+Testing+client+application+reachability+for+subscription+Request-Id%3a+c340fcfe-a079-4dd8-85c5-8dc10c158250

но так как у него нет косой черты, я получаю эту ошибку:

RuntimeError: You called this URL via POST, but the URL doesn't end in a slash and you have APPEND_SLASH set. Django can't redirect to the slash URL while maintaining POST data. Change your form to point to 9d065f52.ngrok.io/api/v1.0/user-calendar-settings/calendar-webhook/?validationToken=Validation%3a+Testing+client+application+reachability+for+subscription+Request-Id%3a+c340fcfe-a079-4dd8-85c5-8dc10c158250 (note the trailing slash), or set APPEND_SLASH=False in your Django settings.

Я ищу в Интернете, и решение состоит в том, чтобы изменить настройку APPEND_SLASH в файле settings.py Однако я не могу этого сделать, мне нужно APPEND_SLASH

Кроме того, другое решение - просто добавить косую черту при POST, однако я не тот, кто POST, а граф Microsoft отправляет мне POST.

это представление, которое я создаю, чтобы график micrsoft отправлял мне POST:

# /api/v1.0/user-calendar-settings/calendar-webhook/
@action(
    detail=False,
    methods=["post"],
    serializer_class=EmptySerializer,
    url_path="calendar-webhook",
    permission_classes=[AllowAny],
)
def calendar_webhook(self, request, pk=None):
    """
    Notification endpoint validation for microsoft graph
    """

    print(request.body)

    validation_token = request.POST.get("validationToken", "")
    import jwt

    # jwt.decode(<encoded token>,<secret key>,<algorthm>)
    decodedPayload = jwt.decode(validation_token, None, None)
    return Response(
        {"status": "ok"},
        status=status.HTTP_200_OK,
        content_type="text/plain",
        data=decodedPayload,
    )

Что мне делать?

1 Ответ

0 голосов
/ 19 июня 2019

я не знаю почему, но это исправлено после того, как я изменил messages_url с это:

notification_url = 9d065f52.ngrok.io/api/v1.0/user-calendar-settings/calendar-webhook

до:

notification_url = 9d065f52.ngrok.io/api/v1.0/user-calendar-settings/calendar-webhook/

единственная разница - косая черта в конце

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...