Почему облачная функция Firestore возвращает неверный ответ на запрос? - PullRequest
0 голосов
/ 05 августа 2020

Я следую руководству по каналу YouTube Firebase на , используя настраиваемые утверждения для авторизации . При попытке вызвать облачную функцию я постоянно получаю ответ «неверный запрос: недопустимый аргумент» от сервера firebase. Функция даже не вызывается. Я предполагаю, что структура data неверна (недопустимый аргумент), но не знаю почему. Может кто-нибудь объяснить это?

облачная функция:

exports.addAdmin = functions.https.onCall( (data: any, context: any) => {
  const email = data.email;
  return grantAdminRole(email).then(() => {
    return{
      result: 'Admin role has been assigned successfully'
    }
  }).catch( err => {
    return{
      error: err
    }
  })
})

async function grantAdminRole(email: string): Promise<void> {
  const user = await admin.auth().getUserByEmail(email);
  if( user.customClaims && user.customClaims.admin === true ) {
    return;
  } else {
    return admin.auth().setCustomUserClaims(user.uid, {
      admin: true
    })
  }
};

клиент:

endpoint = 'https://[MY_FUNCTION_URL]';
userEmail = 'test@test.com';

constructor( private http: HttpClient ) {}

grantAdminRole() {
  this.http.post(this.endpoint, this.userEmail ).subscribe( res => {
    console.log(res);
  });
}

1 Ответ

2 голосов
/ 05 августа 2020

На вашей стороне сервера реализованы вызываемые Облачные функции , как показано:

functions.https.onCall

Но ваш клиент затем пытается вызвать его как Облачная функция HTTP с:

this.http.post(this.endpoint, ...

Хотя вызываемые функции построены на основе функций HTTP, их нельзя вызывать таким же образом. Вам следует использовать SDK клиентских функций для вызова вызываемой облачной функции или реализовать проводной протокол .

...