Vue JS 3 + Firebase: как вызвать функцию Cloud Run (функция Firebase 2-го поколения), которая требует аутентификацииJavascript

Форум по Javascript
Ответить Пред. темаСлед. тема
Anonymous
 Vue JS 3 + Firebase: как вызвать функцию Cloud Run (функция Firebase 2-го поколения), которая требует аутентификации

Сообщение Anonymous »

  • Мое приложение создано с использованием Vue JS 3, а Firebase установлен как
    зависимость.

    < li>Я создал приложение Firebase для управления серверной частью. Чтобы
    обрабатывать остальные вызовы API из приложения Vue JS, я создаю
    функцию Firebase.
  • Функция имеет следующие зависимости в package.json:
    "dependents": {
    "cors": "^2.8.5",
    "express": "^4.21 .2",
    "firebase-admin": "^12.6.0",
    "firebase-functions": "^6.0.1"
    },
  • Index.js в папке функций выглядит следующим образом:

Код: Выделить всё

const {onRequest} = require("firebase-functions/v2/https");
const {getAuth} = require("firebase-admin/auth");

const express = require("express");
const app = express();

// Add middleware to authenticate requests
app.use(async (req, res, next) => {
const authHeader = req.headers.authorization || "";
const token = authHeader.split("Bearer ")[1];

if (!token) {
return res.status(401).json({error: "Unauthorized"});
}

try {
const decodedToken = await getAuth().verifyIdToken(token);
req.user = decodedToken;
next();
} catch (error) {
console.error("Error verifying token:", error);
res.status(403).json({error: "Forbidden"});
}
});

app.get("/hello", (req, res) => {
res.json({message: "Hello, world!"});
});

// Expose Express API as a single Cloud Function:
exports.api = onRequest(app);


Здесь имя функции: "api".
Теперь эта настройка отлично работает локально во время тестирования.
После развертывания функции URL-адрес функции выглядит примерно так: "https://REGION-MY-APP-NAME.cloudfunctions.net/api ".
Теперь из приложения Vue JS 3 с помощью axios я пытаюсь достичь указанной выше конечной точки и использую метод Firebase для создания токена, который выглядит следующим образом:

Код: Выделить всё

    const userCredential = await signInWithEmailAndPassword(auth, emailId.value, password.value);
const token = await userCredential.user.getIdToken(); // Get the token


Но это приводит к ошибке CORS в браузере (Примечание: я пробовал добавить cors в моем коде функции, чтобы разрешить все источники, но это не помогло)
С другой стороны, в журнале функций запуска облака написано:

«Запрос не был аутентифицирован. Либо разрешите неаутентифицированные
вызовы или установите правильный заголовок авторизации. Дополнительную информацию можно найти на странице
https://cloud.google.com/run/docs/secur ... enticating. Дополнительную
документацию по устранению неполадок можно найти по адресу:https://cloud.google.com/run/docs/troub ... zed-client"

После получения этой ошибки я также удалил приведенный ниже код из своего index.js и попробовал. но выдал ту же ошибку:

Код: Выделить всё

// Add middleware to authenticate requests
app.use(async (req, res, next) => {
const authHeader = req.headers.authorization || "";
const token = authHeader.split("Bearer ")[1];

if (!token) {
return res.status(401).json({error: "Unauthorized"});
}

try {
const decodedToken = await getAuth().verifyIdToken(token);
req.user = decodedToken;
next();
} catch (error) {
console.error("Error verifying token:", error);
res.status(403).json({error: "Forbidden"});
}
});


Я знаю, что в функции есть опция «Разрешить неаутентифицированные вызовы». настройки. Но из-за некоторых ограничений политики я не могу этого сделать.
И я также знаю, что есть некоторая проблема в любом из моих методов генерации токенов в моем приложении Vue JS 3. Я нашел ссылку для создания токена в узле js (https://cloud.google.com/docs/authentic ... en#node.js)
Моя проблема в том, что у меня есть только приложение Vue JS 3 во внешнем интерфейсе, и я хочу использовать эту функцию второго поколения в качестве серверной части с помощью Express JS для выполнения задач, связанных с серверной частью, таких как хранение и извлечение данных из Cloud FireStore и связанных с этим вещей... Но застрял на этой ошибке аутентификации. Нужно помочь устранить ошибку аутентификации 403.
Если необходима какая-либо другая информация. Пожалуйста, дайте мне знать, я предоставлю.

Подробнее здесь: https://stackoverflow.com/questions/793 ... e-function
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Функция Cloud (Run) не запускается при Cloud Run — контейнер не удалось запустить и прослушать порт = 8080 после недавне
    Anonymous » » в форуме Python
    0 Ответы
    40 Просмотры
    Последнее сообщение Anonymous
  • Функция Cloud (Run) не запускается при Cloud Run — контейнер не удалось запустить и прослушать порт = 8080 после недавне
    Anonymous » » в форуме Python
    0 Ответы
    30 Просмотры
    Последнее сообщение Anonymous
  • Соединение Docker Cloud Cloud Cloud Cloud
    Anonymous » » в форуме JAVA
    0 Ответы
    51 Просмотры
    Последнее сообщение Anonymous
  • Соединение Docker Cloud Cloud Cloud Cloud
    Anonymous » » в форуме JAVA
    0 Ответы
    58 Просмотры
    Последнее сообщение Anonymous
  • Функция Google Cloud снижает скорость загрузки (Gen 2 Cloud Run)
    Anonymous » » в форуме Python
    0 Ответы
    29 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Javascript»