Значение доступа к базе данных Firebase Realtime, связанное с ключом - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть несколько проблем. Я пытался проверить ключ, используя Firebase-Admin SDK через функции http.onReuest Firebase.

Итак, что я здесь делаю, - администратор может отправить ссылку приглашения пользователю, просто введя его электронный идентификатор в веб-клиенте. Поэтому, когда администратор отправляет приглашение, он помещает идентификатор электронной почты в базу данных Firebase, захватывает автоматически сгенерированный ключ, прикрепляет ключ к URL-адресу и отправляет URL-адрес пользователю. Когда пользователь щелкает ссылку в электронном письме, он отправляет запрос на получение функции ниже, которая разбивает URL-адрес, ищет идентификатор в базе данных и возвращает ответ соответствующим образом.

Но поиск значения, связанного с ключом, не работает. Я пробовал разные фрагменты кода, но ни один не работает.

A - / * Формат приглашения URL - https://web-url.com/invite/ [ идентификатор уникального учителя ] = [ auto-gen -key-id ] * /

app.get('/invite/:token', (req, res) => {
    var result = req.params.token.split("=");
    const ref = database.ref('/teachers/' + result[0] + '/invited/');
    ref.once('value', (snap) => {
        snap.forEach((data) => {
            if (data.key === result[1]) res.send(data.val());
            else res.send("No user found... :(");
        });
    });
});


exports.fakeApp = functions.https.onRequest(app);

B -

// verify invite link and add to database
app.get('/invite/:token', (req, res) => {
    var result = req.params.token.split("=");
    const ref = database.ref('/teachers/' + result[0] + '/invited/');
    ref.orderByKey().equalTo(result[1]).on("child_added" /* also tried "value" */, (snap)=>{
        res.send({
            status:"sucess",
            value: snap.val()
        });
    });
});

Кроме того, я продолжаю ударять по конечной точке каждые 15se c, иногда он показывает успех, но большую часть времени показывает внутреннюю ошибку сервера или ошибку тайм-аута или ошибку: не удалось обработать запрос

EDIT

    {
    "teachers":
    {
        "teacher-unique-id":
        {
            "invited":
            {
                "auto-gen-key-id": "student-email-id-1",
                "auto-gen-key-id": "student-email-id-2",
                "auto-gen-key-id": "student-email-id-3",
                "auto-gen-key-id": "student-email-id-4",
                "auto-gen-key-id": "student-email-id-5",
            },
            "accepted":
            {
                "auto-gen-key-id": "unique-student-id-1",
                "auto-gen-key-id": "unique-student-id-2",
                "auto-gen-key-id": "unique-student-id-3",
            }
        }
    },
    "students":
    {
        "unique-student-id-1":
        {
            "session-id-1":
            {
                "auto-gen-key-id": "data",
                "auto-gen-key-id": "data",
                "auto-gen-key-id": "data",
                "auto-gen-key-id": "data",
                "auto-gen-key-id": "data",
            },
            "session-id-2":
            {
                "auto-gen-key-id": "data",
                "auto-gen-key-id": "data",
                "auto-gen-key-id": "data",
                "auto-gen-key-id": "data",
                "auto-gen-key-id": "data",
            }
        },
        "unique-student-id-2":
        {
            "session-id-1":
            {
                "auto-gen-key-id": "data",
                "auto-gen-key-id": "data",
                "auto-gen-key-id": "data",
                "auto-gen-key-id": "data",
                "auto-gen-key-id": "data",
            },
            "session-id-2":
            {
                "auto-gen-key-id": "data",
                "auto-gen-key-id": "data",
                "auto-gen-key-id": "data",
                "auto-gen-key-id": "data",
                "auto-gen-key-id": "data",
            }
        }
    }
}

1 Ответ

2 голосов
/ 29 апреля 2020

Наконец-то я все исправил сам! ---

// проверить ссылку приглашения и добавить в базу данных

app.get('/invite/:token', (req, res) => {
    let result = req.params.token.split("=");
    let ref = database.ref('/teachers/' + result[0] + '/invited/');

    ref.child(result[1]).once('value').then(snap => {
        if (snap.val() != null) {
            res.send({
                msg: "Hurray! You exists",
                status: "Found",
                val: snap.val(), 
            });
        } else {
            res.send({
                msg: "Please Don't Hack me", 
                status: "Not Found"
            });
        }
    }).catch(err => {
        throw new functions.https.HttpsError('unknown', error.message, error);
    });

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