簡體   English   中英

驗證令牌類型錯誤時出錯:無法讀取未定義的屬性“數據” firebase nodejs

[英]Error while verifying token TypeError: Cannot read property 'data' of undefined firebase nodejs

到目前為止,一切都運行良好,但在向我的應用程序添加 firebase 用戶身份驗證后,我的應用程序開始出現異常。

這是我的 auth.js 代碼

const { admin, db } = require('./admin');

module.exports = (request, response, next) => {
let idToken = "eyJhbGciOiJSUzI1NiIsImtpZCI6IjIzNzA1ZmNmY2NjMTg4Njg2ZjhhZjkyYWJiZjAxYzRmMjZiZDVlODMiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL3NlY3VyZXRva2VuLmdvb2dsZS5jb20vdG9kby0zNjVlYSIsImF1ZCI6InRvZG8tMzY1ZWEiLCJhdXRoX3RpbWUiOjE2MDIzNDQyNDUsInVzZXJfaWQiOiJIeGRNcklxeVhQYlpaaWxEQ0NQaW9iNm15WngyIiwic3ViIjoiSHhkTXJJcXlYUGJaWmlsRENDUGlvYjZteVp4MiIsImlhdCI6MTYwMjM0NDI0NSwiZXhwIjoxNjAyMzQ3ODQ1LCJlbWFpbCI6InNhbXVlbG9ub2phOTcwQGdtYWlsLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwiZmlyZWJhc2UiOnsiaWRlbnRpdGllcyI6eyJlbWFpbCI6WyJzYW11ZWxvbm9qYTk3MEBnbWFpbC5jb20iXX0sInNpZ25faW5fcHJvdmlkZXIiOiJwYXNzd29yZCJ9fQ.mOmV_V69IfCbQuf_QBiNgCsXCwlU4OTkT8fDVp6lkxtaBM8ZfOG55ymRikKJZ6J7z4siyT4sV89p4Ke0LFTX3KcmtkWNVQ0ERpWBvIi8hK2aqO53HbfUUo278tCGZAChx-xC_Drphz7xg8VJAqUm-rxBumqOBSukgivLXJLkBcvW87cNI2JPBmQr_DCL1FVWTYq9cQ9clVoSJDvbAaGZfay9nH5fuLXNs7m0CnFasqRerUoJ41Ro8kelfBMrzsXMp9bwevJNSrgBkjTyN7x5IURdVD8Ln4A6rIIxEJG-xmCmKHluFv3z_hlMEeFDGopQjGTJjeoYWtvh1gmRBnEcjw";
admin
    .auth()
    .verifyIdToken(idToken)
    .then((decodedToken) => {
        request.user = decodedToken;
        return db.collection('users').where('userId', '==', 
request.user.uid).limit(1).get();
    })
    .then((data) => {
        request.user.username = data.docs[0].data().username;
        request.user.imageUrl = data.docs[0].data().imageUrl;
        return next();
    })
    .catch((err) => {
        console.error('Error while verifying token', err);
        return response.status(403).json(err);
    });
};

從我添加到 firebase 的帳戶之一獲取令牌 ID,但我在控制台上不斷收到錯誤消息:“> 驗證令牌類型錯誤時出錯:無法讀取未定義的屬性‘數據’”

每當我嘗試發送 GET 請求時,我只會打印出 {}

該錯誤表明您的查詢未返回任何文檔。 在嘗試訪問docs數組中的數據之前,您應該檢查dataQuerySnapshot對象)是否包含任何文檔。

我將其重命名為qs並展示一種更慣用的使用方式:

    .then((qs) => {
        if (!qs.empty) {
            const data = qs.docs[0].data()
            request.user.username = data.username;
            request.user.imageUrl = data.imageUrl;
            return next();
        }
        else {
            // decide what you want to do if there are no documents
        }
    })

謝謝。 我讓它工作了。

module.exports = (request, response, next) => {
let idToken;
if (request.headers.authorization && request.headers.authorization.startsWith('Bearer ')) {
    idToken = request.headers.authorization.split('Bearer ')[1];
} else {
    console.error('No token found');
    return response.status(403).json({ error: 'Unauthorized' });
}
// idToken comes from the client app
admin
admin
    .auth()
    .verifyIdToken(idToken)
    .then((decodedToken) => {
        request.user = decodedToken;
        return Promise.resolve(db.collection('users').limit(1).get());
    })
    .then((data) => {
        console.log(data)
        request.user.username = data.docs[0].data().username;
        request.user.imageUrl = data.docs[0].data().imageUrl;
        return next();
    })
    .catch((err) => {
        console.error('Error while verifying token', err);
        return response.status(403).json(err);
    });
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM