登录后Django allauth会话JSON序列化错误

ddi*_*ipp 1 python django django-allauth django-1.6

我已经安装了django-allauth,之后这是我的settings.py

Django_apps = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
)

Third_party_apps = (
    'avatar',
    'allauth',
    'allauth.account',
    'allauth.socialaccount',
    'bootstrapform',
    'allauth.socialaccount.providers.github',
    'allauth.socialaccount.providers.twitter',
)

My_apps = ()

INSTALLED_APPS = Django_apps + Third_party_apps +  My_apps

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.contrib.auth.context_processors.auth',
    "django.core.context_processors.request",
    "allauth.account.context_processors.account",
    "allauth.socialaccount.context_processors.socialaccount",
)
AUTHENTICATION_BACKENDS = (
    "django.contrib.auth.backends.ModelBackend",
    "allauth.account.auth_backends.AuthenticationBackend",
)
ACCOUNT_ADAPTER ="allauth.account.adapter.DefaultAccountAdapter"
ACCOUNT_AUTHENTICATION_METHOD = "username_email"
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_EMAIL_VERIFICATION = "optional"
ACCOUNT_USERNAME_MIN_LENGTH = 3
Run Code Online (Sandbox Code Playgroud)

我相信我也正确设置了我的urls.py. 而且我还有两个来自django admin的社交应用程序,带有正确的twitter和github api密钥和秘密.

但问题是每当我点击通过Twitter登录时它会向我显示正确的twitter身份验证页面,在我授权应用程序后它会给我这个错误..

<allauth.socialaccount.models.SocialLogin object at 0x7feb5875a650> is not JSON serializable
Run Code Online (Sandbox Code Playgroud)

而且我和github也得到了几乎相同的错误.喜欢

<allauth.socialaccount.models.SocialLogin object at 0x7feb5877a590> is not JSON serializable
Run Code Online (Sandbox Code Playgroud)

所以请帮我理解是什么问题

小智 19

在Django 1.6中,您必须将SESSION_SERIALIZER参数更改为pickle.把它放在您的settings.py中:

SESSION_SERIALIZER='django.contrib.sessions.serializers.PickleSerializer'
Run Code Online (Sandbox Code Playgroud)

我不知道allauth什么时候会与这个新的Django序列化格式兼容.请参阅Django 1.6发行说明.

  • 这里要小心.将会话序列化设置为PickleSerializer会带来安全风险,这就是它首先被更改的原因:**class serializers.PickleSerializer支持任意Python对象,但如上所述,如果SECRET_KEY变为已知,则可能导致远程代码执行漏洞攻击者.**https://docs.djangoproject.com/en/1.6/topics/http/sessions/#session-serialization (2认同)