- Мое приложение создано с использованием 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
Мобильная версия