0

MongoEngineSocial 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設定が必要かどうかはわかりません。私はそれをテストしませんでした。

4

0 に答える 0