Ошибка базы данных при аутентификации пользователя из MongoDB, связанного с приложением Django, развернутым в GCP

#django #mongodb #google-cloud-platform

#django #mongodb #google-облачная платформа

Вопрос:

Я развернул приложение Django в облачной платформе Google. Я использую MongoDB atlas для хранения пользовательских данных. Я могу успешно зарегистрироваться и войти в систему, запустив его на localhost. Но когда я пытаюсь зарегистрироваться / войти в систему непосредственно с URL-адреса приложения, это выдает ошибку базы данных. В settings.py файл, я дал строку подключения к базе данных MongoDB. Как я смогу получить доступ к данным, хранящимся в MongoDB, через приложение, развернутое в GCP?

Для развертывания используются ресурсы App Engine и Cloud SDK.

Подключение к базе данных в settings.py файл выглядит следующим образом:

 DATABASES = {
    'default': {
        
        
        'ENGINE': 'djongo',
        'CLIENT': {
            'name' : 'Example',
           'host':'mongodb srv://username:password@[host]?retryWrites=trueamp;w=majority',
            'username': 'username',
            'password': 'password',
            'authMechanism': 'SCRAM-SHA-1',
        },
    }
}
  

Ошибка заключается в следующем:

 DatabaseError at /login
No exception message supplied
Request Method: POST
Request URL:    https://[PROJECT-ID].ew.r.appspot.com/login
Django Version: 3.0.5
Exception Type: DatabaseError
Exception Location: /env/lib/python3.7/site-packages/djongo/cursor.py in execute, line 59
Python Executable:  /env/bin/python3.7
Python Version: 3.7.9
Python Path:    
['/srv',
 '/env/bin',
 '/opt/python3.7/lib/python37.zip',
 '/opt/python3.7/lib/python3.7',
 '/opt/python3.7/lib/python3.7/lib-dynload',
 '/env/lib/python3.7/site-packages']
Server time:    Tue, 17 Nov 2020 12:48:36  0000

The above exception ( Keyword: None Sub SQL: None FAILED SQL: ('INSERT INTO "django_session" ("session_key", "session_data", "expire_date") VALUES (%(0)s, %(1)s, %(2)s)',) Params: (('[REDACTED_SESSION_KEY]', '[REDACTED_SESSION_DATA]', datetime.datetime(2020, 12, 1, 12, 48, 35, 677384)),) Version: 1.3.3) was the direct cause of the following exception:
/env/lib/python3.7/site-packages/django/db/backends/utils.py in _execute
                return self.cursor.execute(sql, params) …
▼ Local vars
Variable    Value
ignored_wrapper_args    
(False,
 {'connection': <djongo.base.DatabaseWrapper object at 0x3e8871fc0790>,
  'cursor': <django.db.backends.utils.CursorDebugWrapper object at 0x3e8871afa790>})
params  
('[REDACTED_SESSION_KEY]',
 '[REDACTED_SESSION_DATA]',
 datetime.datetime(2020, 12, 1, 12, 48, 35, 677384))
self    
<django.db.backends.utils.CursorDebugWrapper object at 0x3e8871afa790>
sql 
('INSERT INTO "django_session" ("session_key", "session_data", "expire_date") '
 'VALUES (%s, %s, %s)')

Variable    Value
db_exe  
DatabaseError()
params  
('[REDACTED_SESSION_KEY]',
 '[REDACTED_SESSION_DATA]',
 datetime.datetime(2020, 12, 1, 12, 48, 35, 677384))
self    
<djongo.cursor.Cursor object at 0x3e8871afad90>
sql 
('INSERT INTO "django_session" ("session_key", "session_data", "expire_date") '
 'VALUES (%s, %s, %s)')
  

Комментарии:

1. Помните, что никогда не следует публиковать разумные данные, такие как ключи, пароли, токены и т. Д. А также личная идентифицируемая информация (если вы этого не хотите, и это обязательная информация), поскольку это может представлять угрозу безопасности для вашего приложения. Это руководство сообщества проливает свет на то, что такое соединение, по крайней мере, возможно с использованием NodeJS и App Engine Flexible, и поэтому я считаю, что это может быть возможно с Djando на App Engine Flexible. Вы следили за каким-либо сообщением или не могли бы вы предоставить пример приложения для попытки воспроизведения?

2. Спасибо, Даниэль. я позабочусь об этом в следующий раз. Я следил за Google cloud docs для развертывания в стандартной среде App Engine. Но как app engine flexible, так и app engine standard использовали базу данных sql, поскольку они не предоставляли информацию о mongodb.