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
Что бы убедится в работоспособности приложения 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 раз?