Django-Push-уведомления 401 несанкционированных - PullRequest
0 голосов
/ 05 ноября 2018

Я пытаюсь настроить push-уведомления, используя django-push-notifications , большую часть кода я скопировал из примера. У меня есть кнопка, которая вызывает функцию enablePushNotifications():

export function enablePushNotifications() {
    console.log("enabling push notifications...");
    if (!'serviceWorker' in navigator){
        console.log("Push notifications not supported");
        return;
    }
    navigator.serviceWorker.ready.then(
        (registration)=>{
            registration.pushManager.subscribe({
                userVisibleOnly: true
            }).then(
                (sub)=>{
                    console.log(sub);
                    let endpointParts = sub.endpoint.split("/");
                    let registration_id = endpointParts[endpointParts.length - 1];
                    let data = {
                        'browser': loadVersionBrowser(navigator.userAgent).name.toUpperCase(),
                        'p256dh': btoa(String.fromCharCode.apply(null, new Uint8Array(sub.getKey('p256dh')))),
                        'auth': btoa(String.fromCharCode.apply(null, new Uint8Array(sub.getKey('auth')))),
                        'registration_id': registration_id,
                        'endpoint': sub.endpoint,
                    };
                    request(
                        "/api/subscribe",
                        data
                    )
                }
            ).catch(
                (error)=>console.error(error)
            )
        }
    )
}

Когда я открываю вкладку сети, я не вижу ничего странного в передаваемых свойствах или заголовках. В частности, значение browser является правильным. Реализация для /api/subscribe URL выглядит следующим образом:

import push_notifications.models as pushmodels
def registerPush(request):
    data = requestFormatting.get_data(
        request
    )

    device = pushmodels.WebPushDevice(
        name=request.user.username,
        active=True,
        user=request.user,
        registration_id=data["registration_id"],
        p256dh=data["p256dh"],
        auth=data["auth"],
        browser=data["browser"]
    )

    device.save()

    device.send_message("hello")

При вызове этой функции возникает ошибка PushError: Ошибка нажатия: 401 Несанкционировано. Я тестировал как на Chrome, так и на Firefox, оба выдают одну и ту же ошибку. Я указываю свой FCM_API_KEY в настройках, больше ничего. В настоящее время я не использую VAPID, хотя планирую в будущем. Я пробовал различные варианты кода, но, похоже, ничего не работает. В документации неясно, как на самом деле инициализировать устройства, и я выбрал только WebPushDevice объекты, поскольку он, похоже, содержит атрибуты, аналогичные данным, приведенным в примере.

Это мой первый раз, когда я пытаюсь использовать веб-пуш, поэтому небольшая помощь будет высоко ценится!

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