我正在使用django-allauth进行社交登录的django项目,同时我使用Disqus作为我网站的评论系统.
我想知道,如何使用Disqus与allauth的单点登录功能?
我有一个自定义用户模型,我正在使用django-allauth进行社交注册和登录.当用户使用已经使用电子邮件注册的社交帐户登录时,我正在尝试将现有用户连接到新的社交帐户.我找到了这个链接.
def pre_social_login(self, request, sociallogin):
user = sociallogin.account.user
if user.id:
return
try:
customer = Customer.objects.get(email=user.email)
except Customer.DoesNotExist:
pass
else:
perform_login(request, customer, 'none')
Run Code Online (Sandbox Code Playgroud)
但是当我尝试通过社交帐户登录时,我收到了错误消息.
RelatedObjectDoesNotExist at /accounts/facebook/login/callback/
SocialAccount has no user.
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.
我也知道这方面的安全问题.但我仍然想尝试这个.
我使用django-rest-auth和django-allauth利用用户的Facebook的个人资料有关用户注册/登录.
现在,我可以从Facebook获取一些标准信息(默认为所有auth).
是否可以检索头像图片列表?如何在allAuth中成功?
我们已经运行了一段时间的网站,django-allauth用于使用以下任何一种身份验证:
...但现在我们想要阻止任何人创建一个新帐户,同时仍允许之前使用这些方法创建帐户的人能够登录.是否有设置可以让我们这样做?我不清楚任何这些记录的设置将允许我们配置它.
与django-allauth相关的当前设置是:
INSTALLED_APPS = (
'django.contrib.auth',
...
'allauth',
'allauth.account',
'allauth.socialaccount',
'allauth.socialaccount.providers.google',
'allauth.socialaccount.providers.facebook',
'allauth.socialaccount.providers.twitter',
...
)
AUTHENTICATION_BACKENDS = (
# Needed to login by username in Django admin, regardless of `allauth`
"django.contrib.auth.backends.ModelBackend",
# `allauth` specific authentication methods, such as login by e-mail
"allauth.account.auth_backends.AuthenticationBackend",
)
SOCIALACCOUNT_PROVIDERS = {
'google': {'SCOPE': ['https://www.googleapis.com/auth/userinfo.profile'],
'AUTH_PARAMS': {'access_type': 'online'}},
'facebook': {'SCOPE': ['email',]},
}
LOGIN_REDIRECT_URL = '/'
ACCOUNT_EMAIL_VERIFICATION = "mandatory"
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_USERNAME_REQUIRED = True
SOCIALACCOUNT_AUTO_SIGNUP = True
Run Code Online (Sandbox Code Playgroud) 用户登录时,我希望用户无限期保持登录状态,除非他们自己提示退出。
我的网站(使用django-allauth进行身份验证)的情况似乎是,当用户登录然后几天不访问该网站(尚未测试多少天)时,它丢失了身份验证,并且它们不再登录。
我希望身份验证状态是永久的,并且不会过期。
有人可以解释一下,告诉我如何实现我想要的。
尝试调查会话Cookie的到期时间并研究默认值。还没走。
我要求用户用自定义表单填写额外的字段.在其中一个领域,我必须让用户选择多个分层标签.为此,我需要将标记从视图传递到模板signup.html
from classes.Tags import Tags
from django.shortcuts import render_to_response
from allauth.socialaccount import views as signup_views
def signup_view(request):
tags = Tags()
parameters={}
all_tags = tags.get_tags()
parameters['all_tags'] = all_tags
response = signup_views.signup(request)
return response
Run Code Online (Sandbox Code Playgroud)
在urls.py中,我在allauth网址包含行之前添加了这一行.
url(r'^accounts/social/signup/', 'mainapp.signup_views.signup_view', name = 'account_signup'),
url(r'^accounts/', include('allauth.urls')),
Run Code Online (Sandbox Code Playgroud)
我需要的是我需要将all_tags添加到响应中,以便我可以从模板中访问它.我怎么做?
我正在使用django 1.6.5和django-allauth 0.18.0,一旦我们在 django 的管理面板中创建社交应用程序,社交登录就会按预期工作。
因此,我的下一步是尝试通过使用适配器来更改模块的行为。
它在文档中看起来很简单, 但不知何故,我似乎无法让django-allauth使用我的自定义适配器。
所以这是我尝试将pdb插入到我的适配器方法中的尝试。
这是我的文件夹/文件结构:
.
??? manage.py
??? requirements.freeze
??? foo
? ??? __init__.py
? ??? settings.py
? ??? urls.py
? ??? wsgi.py
??? foo_app
??? adapters.py
??? views.py
??? etc...
Run Code Online (Sandbox Code Playgroud)
这是我的foo/settings.py文件:
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sites',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'south',
'allauth',
'allauth.account',
'allauth.socialaccount',
'allauth.socialaccount.providers.facebook',
'foo_app'
)
ACCOUNT_ADAPTER="foo_app.adapters.FooAppAccountAdapter"
SOCIALACCOUNT_ADAPTER="foo_app.adapters.FooAppSocialAccountAdapter"
Run Code Online (Sandbox Code Playgroud)
这是我的foo_app/adapters.py文件:
# -*- coding: utf-8 -*-
import pdb
from …Run Code Online (Sandbox Code Playgroud) 我有一个注册表单,只询问电子邮件和密码.当用户注册时,django-allauth通过从用户的电子邮件地址中删除"@email"后缀来为该用户创建用户名.
例如,如果用户使用" some-user@example.com "注册,则其用户名将为" some-user ",如果其他用户使用" some-user@gmail.com "注册,则其用户名将为" 一些用户 "
但我想要的是用户的用户名和电子邮件具有相同的价值.
那么如何配置django-allauth将用户名设置为用户电子邮件而不删除其后缀呢?
如果可能,如何在不创建自定义用户的情况下执行此操作.
在我的settings.py中:
#########################
# AllAuth Configuration #
#########################
ACCOUNT_AUTHENTICATION_METHOD = 'email'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_UNIQUE_EMAIL = True
ACCOUNT_USERNAME_REQUIRED = False
ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
ACCOUNT_PASSWORD_MIN_LENGTH = 8
Run Code Online (Sandbox Code Playgroud) 在纯Django我会这样做:
from django.contrib.auth.models import User
user = User.objects.create_user(username=email, email=email)
Run Code Online (Sandbox Code Playgroud)
但是django allauth带来了这些EmailAdress东西.我是否也必须创建其中一个然后我很好?
from allauth.account.models import EmailAddress
EmailAddress.objects.create(user=user, email=email, primary=True, verified=False)
Run Code Online (Sandbox Code Playgroud)
我不想打破一些django allauth逻辑,现有的适配器方法不适合我的需要.
编辑:替换setup_user_email为EmailAddress
EDIT2:替换add_email为create,想要设置primary=True
我将 Django 2.0.10 与 rest 框架、rest-auth 和 allauth 一起使用,并带有 React 前端。Rest-auth 使用 JWT 令牌身份验证提供登录和注销功能,但我无法弄清楚如何允许用户请求重新发送验证电子邮件。
我希望用户能够登录并按下“重新发送确认电子邮件”按钮。例如,如果他们不小心删除了电子邮件,他们需要能够请求另一个。
我已经看到帖子建议您可以使用 allauth 的 send_email_confirmation,但这需要一个由模板生成的 CSRF 令牌。我尝试按照文档从 csrf 中排除,但它没有任何不同。我还尝试按照此处的建议设置 authentication_classes = () 。这是我的代码:
设置:
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.TokenAuthentication',
],
}
Run Code Online (Sandbox Code Playgroud)
网址.py
from users.views import EmailConfirmation
urlpatterns = [
...
url(r'^/sendconfirmationemail/', EmailConfirmation.as_view(), name='send-email-confirmation')
]
Run Code Online (Sandbox Code Playgroud)
视图.py
from rest_framework.views import APIView
from django.views.decorators.csrf import csrf_exempt
from django.utils.decorators import method_decorator
class EmailConfirmation(APIView):
@method_decorator(csrf_exempt)
authentication_classes = ()
def post(self):
send_email_confirmation(user=self.request.user)
Run Code Online (Sandbox Code Playgroud)
当我发布到端点“/api/v1/rest-auth/sendconfirmationemail/”时,我收到错误禁止:
<p>You are seeing this …Run Code Online (Sandbox Code Playgroud)