Как установить заголовок авторизации при вызове "вызываемой функции" в Firebase - PullRequest
0 голосов
/ 01 августа 2020

В основном моя проблема в том, что у меня есть вызываемые функции в Firebase, где я хочу использовать «контекст», чтобы определить, аутентифицирован пользователь или нет. Во внешнем интерфейсе я вхожу в систему с использованием аутентификации Firebase (которая является функцией http в firebase), и в результате я получаю свой токен пользователя (который должен использоваться как токен-носитель в заголовке авторизации). Проблема в том, что я не уверен, как установить заголовок при входе в систему, чтобы мой "context.auth" содержал информацию о зарегистрированном пользователе, а не был пустым. Я использую firebase.functions().httpsCallable('myFunction');, поскольку в документе предлагается выполнить вызов из внешнего интерфейса, где проблема заключается в том, что даже если я вошел в систему перед выполнением этого вызова, мой контекст равен нулю.

Чтобы дать больше контекста, подумайте о следующем сценарий,

//Backend (deployed to cloud functions)
exports.signout = functions.https.onCall((data, context) => {
    if(context.auth){
        //do signout stuff and return true
    }
    else{
        //not logged in so you can't sign out return false
    }
});


//Client
let signout = firebase.functions().httpsCallable('signout');
signout()
    .then(res => console.log("signed out"))
    .catch(err => console.log(err))

Итак, проще говоря, при создании httpsCallable('signout') в клиенте я должен иметь токен пользователя в заголовке «Авторизация» в соответствии с документами, чтобы я мог получить доступ к context.auth из моя вызываемая функция. Я не понимаю, как там установить этот заголовок? Наиболее логично установить его при входе в систему, но это не что-то вроде установки заголовка по умолчанию для ax ios, поскольку вызов не совсем HTTP-запрос, а мы используем эту специальную функцию httpsCallable. Итак, как / когда должен быть установлен этот заголовок аутентификации?

1 Ответ

1 голос
/ 01 августа 2020

Когда вы используете функцию вызываемого типа из веб-клиента или мобильного клиента с помощью предоставленного SDK, все детали протокола HTTP обрабатываются автоматически. Вам ничего не нужно делать, чтобы установить какие-либо заголовки.

Если пользователь вошел в систему на момент запроса, SDK автоматически добавит заголовок авторизации. Если пользователь вышел из системы, заголовок добавляться не будет. Итак, если вы хотите вызвать signout с авторизацией конечного пользователя, вам, очевидно, придется вызывать его, пока они вошли в систему.

Похоже, вы могли выйти из системы пользователя перед вызовом вызываемого. В этом случае ваша функция не получит пользовательских данных.

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