firebase-admin "Your client does not have permission to get URL..."

Получаю данные от пользователя на фронте с помощью firebase/auth и signInWithPopup() и отправляю их на свой Node.js бекенд. Там уже проверяю либо его с помощью firebase-admin и admin.auth().getUser(credential.user.uid) либо admin.auth().verifyIdToken(credential._tokenResponse.idToken) Оба варианта на localhost работают исправно, но после деплоя на сервер- на бекенде постоянно ошибка

<p><b>403.</b> <ins>That’s an error.</ins>\n' +
0|crm_back_dev  |       '  <p>Your client does not have permission to get URL <code>/v1/projects/project-3d139/accounts:lookup</code> from this server.  <ins>That’s all we know.</ins>\n' +
0|crm_back_dev  |       '". Status code: "403". Outgoing request: "POST https://identitytoolkit.googleapis.com/v1/projects/project-3d139/accounts:lookup."'
0|crm_back_dev  |   },
0|crm_back_dev  |   codePrefix: 'app'
0|crm_back_dev  | }

Иногда, примерно раз 1-2 часа, запрос срабатывает 1 раз и всё! затем снова ошибки. Права доступа в console https://console.cloud.google.com

Что бы убедится в работоспособности приложения firebase и настроек cloud и quotes - подключил его к другому, уже работающему проекту на другом сервере, c точно такой же схемой авторизации. И всё работает без ошибок, тестировал много раз.

Сделал вывод что проблема именно в удалённом сервере linux. На сервере запускаю через pm2, в вручную тоже пробовал. Проксирую через nginx на 5000 порт. SSL есть.

const admin = require("firebase-admin");

class GoogleService{
    
    constructor(){
        admin.initializeApp({
            credential: admin.credential.cert({
                "type": "service_account",
                "project_id": "***",
                "private_key_id": "***",
                "private_key": "***,
                "client_email": "***",
                "client_id": "***",
                "auth_uri": "https://accounts.google.com/o/oauth2/auth",
                "token_uri": "https://oauth2.googleapis.com/token",
                "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
                "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-vxm3x%40project-b8619.iam.gserviceaccount.com",
                "universe_domain": "googleapis.com"
            })
        })
    }

    async checkUserGoogleToken(credential){
        try {
            if(!credential) return {status: false}
            const data = await admin.auth().getUser(credential.user.uid)
            if(data.displayName && data.email){
                return {status: true, data:{name: data.displayName, email: data.email, avatar: data.photoURL}}
            } else return {status: false}
           
        } catch (error) {
            console.log("checkUserGoogleToken", error);
            return {status: false}
        }
    }
}
 
module.exports = { 
    GoogleService: new GoogleService() 
}

Помогите подумать, над вопросами))

Почему на localhost работают несколько вариантов, а на сервере linux ни один

Почему вижу ошибку в виде html страницы вместо json, это нормально?

Почему может иногда срабатывать 1 раз?


Ответы (0 шт):