1

python-social-auth私はで仕事をしようとしmongodbます。

ここに追加するように指示されている指示に従います。

INSTALLED_APPS = (
    ...
    'social.apps.django_app.me',
    ...
)

SOCIAL_AUTH_STORAGE = 'social.apps.django_app.me.models.DjangoStorage'

ただし、何か問題が発生し、ImportError が発生します。

Unhandled exception in thread started by <bound method Command.inner_run of <django.contrib.staticfiles.management.commands.runserver.Command object at 0x101c51d50>>
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/management/commands/runserver.py", line 92, in inner_run
    self.validate(display_num_errors=True)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/management/base.py", line 280, in validate
    num_errors = get_validation_errors(s, app)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/management/validation.py", line 35, in get_validation_errors
    for (app_name, error) in get_app_errors().items():
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/db/models/loading.py", line 166, in get_app_errors
    self._populate()
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/db/models/loading.py", line 75, in _populate
    self.load_app(app_name)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/db/models/loading.py", line 96, in load_app
    models = import_module('.models', app_name)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/utils/importlib.py", line 35, in import_module
    __import__(name)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/social/apps/django_app/me/models.py", line 29, in <module>
    'mongoengine.django.auth.User'
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/social/utils.py", line 21, in module_member
    module = import_module(mod)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/social/utils.py", line 15, in import_module
    __import__(name)
ImportError: No module named auth

私のsettings.pyにも次のコードがあります。コメントアウトする'social.apps.django_app.me',と、ソーシャル認証に接続されたデータベースがなくなります。そのままにしておくと、コードは失敗します。

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'mongoengine.django.mongo_auth',

    'social.apps.django_app.default',
    'social.apps.django_app.me', # this is the line that fails
)
AUTHENTICATION_BACKENDS = (
    'mongoengine.django.auth.MongoEngineBackend',
    'django.contrib.auth.backends.ModelBackend',
    'social.backends.facebook.FacebookOAuth2',
)



# Engine stuff
SESSION_ENGINE = 'mongoengine.django.sessions'

#AUTH_USER_MODEL = 'mongo_auth.MongoUser'

MONGOENGINE_USER_DOCUMENT = 'mongoengine.django.auth.User'


_MONGODB_USER = '***'      #real stuf here
_MONGODB_PASSWD = '***'    #real stuf here
_MONGODB_HOST = '***'      #real stuf here
_MONGODB_NAME = '****'     #real stuf here
_MONGODB_DATABASE_HOST = \
    'mongodb://%s:%s@%s/%s' \
    % (_MONGODB_USER, _MONGODB_PASSWD, _MONGODB_HOST, _MONGODB_NAME)

mongoengine.connect(_MONGODB_NAME, host=_MONGODB_DATABASE_HOST)

# Auth Stuff
SOCIAL_AUTH_STORAGE = 'social.apps.django_app.me.models.DjangoStorage'
SOCIAL_AUTH_FACEBOOK_KEY = '***'        #real stuf here
SOCIAL_AUTH_FACEBOOK_SECRET = '***'     #real stuf here
SOCIAL_AUTH_FACEBOOK_SCOPE = ['email','user_location']

追加するものがありませんか?どうすれば修正できますか?

4

2 に答える 2

0

これを自分で試してみましたがAUTH_USER_MODEL、のデフォルト値がエラーを引き起こしているようです。デフォルト値はauth.Userwhich refs todjango.contrib.auth.models.Userです。しかし、それを に定義するとmongoengine.django.auth.User、django は形式が ではないことについて不平を言いますapp_name.ModelName

定義SOCIAL_AUTH_USER_MODEL = 'mongoengine.django.auth.User'することで問題が解決します。

于 2013-09-22T21:55:50.603 に答える
0

MongoEngine は、django で認証を提供するための 2 つの異なる方法を提供します。

最初のものだけが python-social-auth で動作します (v0.1.17 現在)。

クラシック認証

基本的に、カスタム認証バックエンドを使用する必要があります。

AUTHENTICATION_BACKENDS = (
    'mongoengine.django.auth.MongoEngineBackend',
)

AUTH_USER_MODELこれはカスタム ユーザー モデルの定義に使用されるため、設定しないでください。ここでは、Django のモデルは無視されています。

ユーザーの保存に使用されるユーザー ドキュメント クラスは によって定義されMONGOENGINE_USER_DOCUMENT、デフォルトは'mongoengine.django.auth.User'です。カスタム ユーザー クラスを作成する場合は、この値を更新できます。

次に、omab が指摘したように、Social-Auth に同じユーザー ドキュメント クラスを設定するだけです。

SOCIAL_AUTH_USER_MODEL = 'mongoengine.django.auth.User'

これは python-social-auth がサポートするオプションです。

カスタム ユーザー モデル

Django 1.5 では、カスタム ユーザー モデル クラスを定義する新しい方法が導入されました。この方法はこれを利用します。認証は、標準の Django 認証バックエンドを使用して行われます。

AUTHENTICATION_BACKENDS = (
    'django.contrib.auth.backends.ModelBackend',
)

AUTH_USER_MODELに設定する必要がありますが'mongo_auth.MongoUser'、これはmongoengine.django.mongo_auth.MongoUser(Django のapp_name.model_name表記法を使用して) を指しています。

このMongoUserモデルは (Django モデルであるため) 直接使用されません。これは、Django のCustom User Modelを使用して別のモデルを使用するよう Django に指示する方法にすぎません。このモデルのマネージャーはMONGOENGINE_USER_DOCUMENT、上記のように定義された MongoEngine ドキュメントを返すだけです。

残念ながら、このメソッドは python-social-auth ではサポートされていませんAUTH_USER_MODEL。実際にはプロキシ Django モデルですが、MongoEngine ドキュメントであることが想定されているためです。

この問題を解決するためにプル リクエストを作成しました。

于 2013-12-26T09:35:52.897 に答える