firebase / firebase/firebase-admin-node

Various issues when used with Cloudflare Pages

オープン
#2,069 コメント 41 件 リアクション 20 件 担当者 1 名 @lahirumaramba が担当を希望しています GitHub で見る
api: auth type: feature request
主要言語
TypeScript
スター
1.7k
フォーク
419
平均マージ
3日 10時間
マージ済み PR(30日)
16

説明

### [READ] Step 1: Are you in the right place?

When running the following Typescript code in Cloudflare Pages on the server-side - in a Remix `server.ts` file:

```
import { applicationDefault, initializeApp as initializeAdminApp } from "firebase-admin/app";

initializeAdminApp({
credential: applicationDefault(),
})
```

I get the following error:

```
[pages:err] TypeError: globalThis.XMLHttpRequest is not a constructor
at checkTypeSupport (/private/Users/jorrit/work/simpl/simpl-energy-website/functions/[[path]].js:15751:17)
at node_modules/rollup-plugin-node-polyfills/polyfills/http-lib/capability.js (/private/Users/jorrit/work/simpl/simpl-energy-website/functions/[[path]].js:15764:177)
at /private/Users/jorrit/work/simpl/simpl-energy-website/functions/[[path]].js:7:52
at node_modules/rollup-plugin-node-polyfills/polyfills/http-lib/request.js (/private/Users/jorrit/work/simpl/simpl-energy-website/functions/[[path]].js:17874:5)
at /private/Users/jorrit/work/simpl/simpl-energy-website/functions/[[path]].js:7:52
at node-modules-polyfills:http (/private/Users/jorrit/work/simpl/simpl-energy-website/functions/[[path]].js:18033:5)
at /private/Users/jorrit/work/simpl/simpl-energy-website/functions/[[path]].js:7:52
at node-modules-polyfills-commonjs:http (/private/Users/jorrit/work/simpl/simpl-energy-website/functions/[[path]].js:18133:21)
at /private/Users/jorrit/work/simpl/simpl-energy-website/functions/[[path]].js:10:47
at node_modules/firebase-admin/lib/utils/api-request.js (/private/Users/jorrit/work/simpl/simpl-energy-website/functions/[[path]].js:22423:76)
```

This is caused by Cloudflare Workers only supporting _fetch_ not _XMLHttpRequest_.

Another issue I run into when using

```
import * as admin from "firebase-admin";
import { applicationDefault, initializeApp as initializeAdminApp } from "firebase-admin/app";

initializeAdminApp({
credential: applicationDefault(),
})

const adminAuth = admin.auth();
```

Is that I get the following error:

```
✘ [ERROR] Could not resolve "@firebase/database-compat/standalone"

node_modules/firebase-admin/lib/app/firebase-namespace.js:106:41:
106 │ ...ject.assign(fn, require('@firebase/database-compat/standalone'));
╵ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The path "./standalone" is not currently exported by package "@firebase/database-compat":

node_modules/@firebase/database-compat/package.json:16:13:
16 │ "exports": {
╵ ^

None of the conditions provided ("types", "node") match any of the currently active conditions ("default", "require", "worker"):

node_modules/@firebase/database-compat/package.json:31:20:
31 │ "./standalone": {
╵ ^

Consider enabling the "types" condition if this package expects it to be enabled. You can use "conditions: ['types']" to do that:

node_modules/@firebase/database-compat/package.json:32:6:
32 │ "types": "./dist/database-compat/src/index.standalone.d.ts",
╵ ~~~~~~~

You can mark the path "@firebase/database-compat/standalone" as external to exclude it from the bundle, which will remove this error. You can also surround this "require" call with a try/catch block to handle this failure at run-time instead of bundle-time.
```

Any chance this npm package can be made compatible with Cloudflare Pages/Workers?

### [REQUIRED] Step 2: Describe your environment

* Operating System version: Cloudflare Pages
* Firebase SDK version: 11.5.0
* Firebase Product: auth
* Node.js version: v19.6.0 (on my workstation, but not in Cloudflare Pages as it doesn't spin up a node environment)
* NPM version: 9.4.0

### [REQUIRED] Step 3: Describe the problem

#### Steps to reproduce:

```bash
npx create-remix@latest

? Where would you like to create your app? ./my-remix-app
? What type of app do you want to create? Just the basics
? Where do you want to deploy? Choose Remix App Server if you're unsure; it's easy to change deployment targets. Cloudflare Pages
? TypeScript or JavaScript? TypeScript
? Do you want me to run `npm install`? Yes

cd my-remix-app
npm install firebase
npm install firebase-admin
touch ./app/firebase.server.ts
```

Add the following content to `app/firebase.server.ts`:

```
import * as admin from "firebase-admin";
import { applicationDefault, initializeApp as initializeAdminApp } from "firebase-admin/app";
import { signInWithEmailAndPassword, getAuth } from "firebase/auth";

// errors with 'TypeError: globalThis.XMLHttpRequest is not a constructor'
initializeAdminApp({
credential: applicationDefault(),
})

// errors with 'Could not resolve "@firebase/database-compat/standalone"'
const adminAuth = admin.auth();

async function signIn(email: string, password: string) {
const auth = getAuth();
return signInWithEmailAndPassword(auth, email, password);
}

export { signIn }
```

And update the `app/routes/index.tsx` file to

```
import type { ActionArgs } from "@remix-run/cloudflare";
import { Form } from "@remix-run/react";
import { signIn } from "~/firebase.server";

export const action = async ({ request }: ActionArgs) => {
let formData = await request.formData();

let email = formData.get("email");
let password = formData.get("password");

const { user } = await signIn(email as string, password as string);
}

export default function Index() {
return (


Email



Password



Sign In


);
}
```

Now run `npm run dev` and see it fail.

コントリビューションガイド

コントリビューションガイドを開く

評価

この issue はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。