标签: django-allauth

当检索到的电子邮件与现有用户的电子邮件匹配时,django allauth facebook重定向到注册?

我成功地能够使用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 = TrueFalse,但没有效果.我尝试更改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?

注意:这个我试过了

更新:

  1. 由于这个答案,我意识到通过Facebook的登录将重定向到一个案例中的注册页面:当从Facebook个人资料中检索到的电子邮件与已有用户的emailid匹配时.
  2. 我已经更新了这个问题,以便解释上述情况.
  3. 总结一下这个问题,这是一个多个提供者帐户具有相同电子邮件ID并且django-allauth不允许互换登录的情况(如果我使用facebook注册一次,则django-allauth将要求我仅使用Facebook而不是谷歌或任何其他提供商与相同的电子邮件ID
  4. 我通过使用@receiver(pre_social_login)raise ImmediateHttpResponse(看看我的答案)解决了有用的链接:这个这个 …

django django-allauth

19
推荐指数
1
解决办法
3324
查看次数

django-allauth SITE_ID错误

我正在学习django,并决定使用django-allauth进行用户注册.我目前只想要本地帐户(我从settings.py中排除了社交身份验证).

当我访问时,/accounts/login我收到以下错误:

你没有设置SITE_ID设置就使用了Django"站点框架".在数据库中创建一个站点并设置SITE_ID设置以修复此错误.

官方Django文档说:

django_site数据库表中当前站点的ID(整数).这样可以使应用程序数据挂钩到特定站点,单个数据库可以管理多个站点的内容.

但我不太明白这一点.现在我只是在开发环境中运行django,通常只是做python manage.py runserver运行的东西,我可以测试我的应用程序.

如何SITE_ID使用本地帐户解决此问题?解决方案在生产/开发环境中会有所不同吗?

django django-allauth

16
推荐指数
1
解决办法
1万
查看次数

Django-allauth,JWT,Oauth

我有一个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

django jwt django-allauth

16
推荐指数
1
解决办法
1974
查看次数

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 django-allauth

15
推荐指数
1
解决办法
6570
查看次数

django-allauth:将多个社交帐户链接到单个用户

在测试django-allauth时,如果我使用不同的社交帐户登录并注销,它们似乎没有链接在一起(因为我无法通过查看socialaccount_set.all.0,socialaccount_set.all.1等来访问它们) ).

有人可以解释如何将社交帐户链接在一起吗?

我确实看到了这篇文章:如何使用django-allauth将多个社交身份验证提供程序连接到同一个django用户?这似乎使用户有责任首先使用一个社交帐户登录,然后为自己链接其他帐户.

当然应该有一种方法可以做到这一点,而不是将责任推给用户?也许通过电子邮件地址

有没有办法在现有用户之后执行此操作?

django django-allauth

14
推荐指数
2
解决办法
5849
查看次数

如何使用django-allauth提供程序信息填充用户配置文件?

我正在使用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)

谢谢!!!

authentication django facebook django-allauth

14
推荐指数
2
解决办法
5151
查看次数

Django中Auth的多个用户类型

我的网站有两种用户类型,客户端专业版.还有两个"主要模块",一个用于客户购买东西等(主要网站),另一个用于专业人员管理操作.对于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 django-models django-forms django-allauth

14
推荐指数
1
解决办法
7654
查看次数

如何在Django allauth中禁用中间注销页面

如何从django allauth中禁用中间注销页面.当用户点击我网站上的注销链接时,我希望他立即注销,我想删除此中间页面 注销中间页面的屏幕截图

django django-views django-allauth

14
推荐指数
2
解决办法
3026
查看次数

类型错误:__init__() 得到意外的关键字参数“providing_args”

我正在创建一个 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)

python django signals django-allauth

14
推荐指数
2
解决办法
7万
查看次数

如何覆盖django-allauth中的模板?

其他问题的答案给人的印象是,事实上这很容易:

但是,我根本无法让它工作.

示例应用程序的设置,我可以看到Django的allauth理应期待它的模板是account,openidsocialaccount目录.但是当我把模板放在TEMPLATE_DIR/account/signup.html它没有加载时,signup视图显示与django-allauth捆绑在一起的模板.我错过了什么?

python django django-allauth

13
推荐指数
3
解决办法
7591
查看次数