MongoEngineとSocial Authのドキュメントで説明されているように、 settings.pyファイルに必要な変更を加えた後、最終的に次のコードを追加しました。
AUTH_USER_MODEL = 'mongo_auth.MongoUser'
SOCIAL_AUTH_MODELS = 'social_auth.db.mongoengine_models'
サーバーを実行しようとすると、次のエラーが表示されます。
File "/Library/Python/2.7/site-packages/social_auth/db/mongoengine_models.py", line 35,
in <module> class UserSocialAuth(Document, UserSocialAuthMixin):
File "/Library/Python/2.7/site-packages/social_auth/db/mongoengine_models.py", line 37, in UserSocialAuth
user = ReferenceField(USER_MODEL, dbref=True)
File "/Library/Python/2.7/site-packages/mongoengine/fields.py", line 837, in __init__
self.error('Argument to ReferenceField constructor must be a '
File "/Library/Python/2.7/site-packages/mongoengine/base/fields.py", line 125, in error
raise ValidationError(message, errors=errors, field_name=field_name)
mongoengine.errors.ValidationError: Argument to ReferenceField constructor must be a
document class or a string
SOCIAL_AUTH_MODELS を削除すると、サーバーは実行されますが、MongoEngine が故障している場合、エンジンがないためソーシャル認証が機能しません。
MongoEngine のバージョン: 0.8.3
解決策が見つかりませんでした。どうすればこれを解決できますか?
解決:
を見ると、がドキュメントではなくモデルに設定されてsocial_auth.db.mongoengine_models.py
いることがわかります。USER_MODEL_APP
このモデルは として定義されmongo_auth.MongoUser
ます。ReferenceField にはモデル (MongoUser) ではなくドキュメントが必要なため、if
ステートメントを無視USER_MODEL
してUser
ドキュメント (mongo.django.auth.User) に設定する必要がありました。これは既にelse
ステートメントに記述されているためです。置き換えた if および else ステートメントを次の 2 行だけ削除しました。
USER_MODEL_MODULE, USER_MODEL_NAME = 'mongoengine.django.auth.User'.rsplit('.', 1)
USER_MODEL = getattr(import_module(USER_MODEL_MODULE), USER_MODEL_NAME)
もう 1 つの方法は、設定からSOCIAL_AUTH_USER_MODEL
とを削除するAUTH_USER_MODEL
ことですが、MongoEngine にAUTH_USER_MODEL
設定が必要かどうかはわかりません。私はそれをテストしませんでした。