firebase / firebase/firebase-admin-python

Datastore emulator causes firebase admin to hang

未關閉
#790 2 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視
api: auth
主要語言
Python
星號
1.2k
分支
359
平均合併
5 天 6 分鐘
30 天內合併 PR
2

描述

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

* Operating System version: Mac 14.5
* Firebase Product: firebase-admin==6.2.0 and firebase-admin==6.5.0
* Python version: 3.11.4
* Pip version: 24.0

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

#### Steps to reproduce:

This problem started around June 1. Before, I have been doing this for several years without any issues.

The problem is that `auth.get_user_by_email()` freezes and it is caused by some interaction with running the cloud datastore emulator locally. This happens with either the older emulator (`gcloud beta emulators datastore start`) or the newer one (`gcloud emulators firestore start `). I have tried downgrading `gcloud` and two versions of firebase-admin listed above.

Run the script below. At `auth.get_user_by_email()`, the script hangs indefinitely with no output. You can't even ctrl-c to stop the script. You need to `kill -9` in a separate terminal window.

If you comment out the three lines starting with `with datastore_client.context():`, then `auth.get_user_by_email()` works.

Since the code just freezes, I am at a loss as to how to debug.

#### Relevant Code:

```
import os
from google.cloud import ndb
import firebase_admin
from firebase_admin import auth, initialize_app

print('starting')

class User(ndb.Model):
email = ndb.StringProperty(required=True)

os.environ['DATASTORE_DATASET'] = 'my-project'
os.environ['DATASTORE_EMULATOR_HOST'] = 'localhost:8081'
os.environ['DATASTORE_EMULATOR_HOST_PATH'] = 'localhost:8081/datastore'
os.environ['DATASTORE_HOST'] = 'http://localhost:8081'
os.environ['DATASTORE_PROJECT_ID']= 'my-project'

datastore_client = ndb.Client('my-project')

if not firebase_admin._apps:
initialize_app()

email = 'me@example.com'

with datastore_client.context():
user = User.get_by_id(email)
print(user)

# This hangs and you can't even ctrl-c to stop.
# Works if datastore client stuff is commented out.
fb_user = auth.get_user_by_email(email)
print(fb_user)
```

貢獻指南

開啟貢獻指南

評估

這個 Issue 還沒有評估資料。

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。