我成功地能够使用Django(1.6.4)和allauth(0.16.1)以及Python(2.7)通过Google和Facebook登录,预期重定向到settings.LOGIN_REDIRECT_URL,以防没有现有用户从中检索到emailid供应商.但是,当已经存在与从提供者(fb或goolge)检索到的用户具有相同emailid的用户时,它总是重定向到/ accounts/social/signup /#= 注册页面询问:
您即将使用您的Facebook/Google帐户登录example.com.最后一步,请填写以下表格:电子邮件已自动填写.
我曾与测试SOCIALACCOUNT_AUTO_SIGNUP = True或False,但没有效果.我尝试更改facebook的auth_type,但除了"rerequest"之外我没有看到任何其他选项
我有以下settings.py:
ACCOUNT_AUTHENTICATION_METHOD = "email" # Defaults to username_email
ACCOUNT_USERNAME_REQUIRED = False # Defaults to True
ACCOUNT_EMAIL_REQUIRED = True # Defaults to False
SOCIALACCOUNT_QUERY_EMAIL = ACCOUNT_EMAIL_REQUIRED
SOCIALACCOUNT_AUTO_SIGNUP = True
SOCIALACCOUNT_EMAIL_REQUIRED = False
ACCOUNT_ADAPTER = "myproject.adapter.MyLoginAccountAdapter"
LOGIN_URL = "/"
LOGIN_REDIRECT_URL = "/users/{id}/mytags"
Run Code Online (Sandbox Code Playgroud)
如何停止此重定向到注册,并将提供程序登录重定向到具有相同emailid的已存在用户的特定LOGIN_REDIRECT_URL?
注意:这个我试过了
更新:
@receiver(pre_social_login)和raise ImmediateHttpResponse(看看我的答案)解决了有用的链接:这个和这个 …我正在学习django,并决定使用django-allauth进行用户注册.我目前只想要本地帐户(我从settings.py中排除了社交身份验证).
当我访问时,/accounts/login我收到以下错误:
你没有设置SITE_ID设置就使用了Django"站点框架".在数据库中创建一个站点并设置SITE_ID设置以修复此错误.
官方Django文档说:
django_site数据库表中当前站点的ID(整数).这样可以使应用程序数据挂钩到特定站点,单个数据库可以管理多个站点的内容.
但我不太明白这一点.现在我只是在开发环境中运行django,通常只是做python manage.py runserver运行的东西,我可以测试我的应用程序.
如何SITE_ID使用本地帐户解决此问题?解决方案在生产/开发环境中会有所不同吗?
我有一个AngularJS单页面应用程序,它使用基于Django Rest Framework的Django后端API.API受到保护django-rest-framework-jwt.我想django-allauth在服务器端使用帐户管理和身份验证.
我只缺少流程中的一个单件:我的客户端的Oauth-Token如何被转换为JWT-token?基本上,我想按照http://blog.wizer.fr/2013/11/angularjs-facebook-with-a-django-rest-api/所述的方式进行操作python-social-auth.
所以我的问题是,如何从链接中实现ObtainAuthToken类django-allauth?
我试着关注最新的http://django-allauth.readthedocs.org/en/latest/#installation
urls.py 文件看起来像:
urlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)),
url(r'^accounts/', include('allauth.urls')),
)
Run Code Online (Sandbox Code Playgroud)
settings.py 文件有:
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.sites',
'allauth',
'allauth.account',
'allauth.socialaccount',
)
TEMPLATE_CONTEXT_PROCESSORS = (
# Required by allauth template tags
"django.core.context_processors.request",
"django.contrib.auth.context_processors.auth",
# allauth specific context processors
"allauth.account.context_processors.account",
"allauth.socialaccount.context_processors.socialaccount",
)
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",
)
SITE_ID = 1
Run Code Online (Sandbox Code Playgroud)
我跑了python …
在测试django-allauth时,如果我使用不同的社交帐户登录并注销,它们似乎没有链接在一起(因为我无法通过查看socialaccount_set.all.0,socialaccount_set.all.1等来访问它们) ).
有人可以解释如何将社交帐户链接在一起吗?
我确实看到了这篇文章:如何使用django-allauth将多个社交身份验证提供程序连接到同一个django用户?这似乎使用户有责任首先使用一个社交帐户登录,然后为自己链接其他帐户.
当然应该有一种方法可以做到这一点,而不是将责任推给用户?也许通过电子邮件地址
有没有办法在现有用户之后执行此操作?
我正在使用django-allauth作为我的身份验证系统.我需要当用户登录时,配置文件模块会填充提供商信息(在我的情况下是facebook).
我正在尝试使用pre_social_login信号,但我只是不知道如何从提供者身份验证中检索数据
from django.dispatch import receiver
from allauth.socialaccount.signals import pre_social_login
@receiver(pre_social_login)
def populate_profile(sender, **kwargs):
u = UserProfile( >>FACEBOOK_DATA<< )
u.save()
Run Code Online (Sandbox Code Playgroud)
谢谢!!!
我的网站有两种用户类型,客户端和专业版.还有两个"主要模块",一个用于客户购买东西等(主要网站),另一个用于专业人员管理操作.对于auth,我想:
由于Django不会让我使用两个模型进行身份验证.我创建了自定义模型子类AbstractBaseUser,它作为Client和Professional的基础auth类.
class BaseUser(AbstractBaseUser):
...
class Client(BaseUser):
...
class Professional(BaseUser):
...
Run Code Online (Sandbox Code Playgroud)
我还将AUTH_USER_MODEL设置更改为:
AUTH_USER_MODEL = 'myapp.BaseUser'
Run Code Online (Sandbox Code Playgroud)
我还包括django-allauth来管理用户注册和身份验证.但是现在我被卡住了.我刚开始玩Django/Python,我不知道如何解决这个问题.
似乎没有官方推荐的方法(使用Django 1.5实现多个用户类型).我应该坚持子类化方法,还是应该在文档中指出OnetoOne关系?
一旦我正确设置了模型,我该如何处理这两个注册表单?是否有可能用django-allauth实现这一点,还是我需要手动完成?
据我所知,当注册新用户时,会在User表中创建一个新的基本用户.但由于我将创建用户专业化(客户端或专业版),我应该如何指定我还想在相应的表中创建与客户端相关的数据或专业相关的数据?
我对Django很新,所以任何建议都会有所帮助
如何从django allauth中禁用中间注销页面.当用户点击我网站上的注销链接时,我希望他立即注销,我想删除此中间页面

我正在创建一个 Django 网站。我最近使用 allauth 包添加权限/搜索功能。当我尝试通过 docker 运行网站时,我收到错误消息:
文件“/usr/local/lib/python3.9/site-packages/allauth/account/signals.py”,第 5 行,位于 user_logged_in = Signal(providing_args=["request", "user"]) TypeError: init ( )收到意外的关键字参数“providing_args”
是什么导致了这个错误?我知道类型错误通常是由不正确的 models.py 文件引起的,但我似乎无法访问该文件,因为它是外部包的一部分。
网址.py
urlpatterns = [
path('admin/', admin.site.urls),
path('accounts/', include('allauth.urls')),
path('accounts/', include('accounts.urls')),
path('', include('climate.urls')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
if settings.DEBUG:
import debug_toolbar
urlpatterns = [
path('__debug__/', include(debug_toolbar.urls)),
] + urlpatterns
Run Code Online (Sandbox Code Playgroud)
模型.py
class Country(models.Model):
id = models.UUIDField(
primary_key= True,
db_index = True,
default=uuid.uuid4,
editable= False
)
name = models.CharField(max_length=50)
population = models.IntegerField(default=1)
emissions = models.FloatField(default=1)
reason = models.CharField(default="", max_length=100)
flags = models.ImageField(upload_to='images/', …Run Code Online (Sandbox Code Playgroud) 其他问题的答案给人的印象是,事实上这很容易:
但是,我根本无法让它工作.
从示例应用程序的设置,我可以看到Django的allauth理应期待它的模板是account,openid和socialaccount目录.但是当我把模板放在TEMPLATE_DIR/account/signup.html它没有加载时,signup视图显示与django-allauth捆绑在一起的模板.我错过了什么?
django ×10
django-allauth ×10
python ×2
django-forms ×1
django-views ×1
facebook ×1
jwt ×1
signals ×1