我想注册用户使用Linkedin,以检索他们的名字,姓氏和电子邮件。为此,我使用allauth在django上。我可以注册的名字和姓氏,但我不能自动保存电子邮件的数据。
查看主页›社交帐户›社交帐户›“the_user”on额外数据:{“要素”:[{“处理”:“urn:li:emailAddress:152954186”,“处理~":{“电子邮件地址”:“example@example.com“}}],“名字”:{....我可以看到代码确实检索了电子邮件,但它没有存储它。
签入来自auth_user的select *;(从数据库)或在Home › Authentication and Authorization › Users中,我看到代码没有自动存储电子邮件。我认为代码检索的是名字和姓氏,因为这些项不在数组中。
我的linkedin应用程序有r_emailaddress、r_liteprofile和w_member_social权限,我使用的是OAuth 2.0。
在www.example.com上settings.py:
ALLOWED_HOSTS = ['localhost']
INSTALLED_APPS = [
...
'django.contrib.sites',
'allauth',
'allauth.account',
'allauth.socialaccount',
'allauth.socialaccount.providers.facebook',
'allauth.socialaccount.providers.linkedin_oauth2',
]
SOCIALACCOUNT_QUERY_EMAIL = True
SOCIALACCOUNT_PROVIDERS = \
{
'linkedin_oauth2': {
'SCOPE': [
'r_liteprofile',
'r_emailaddress',
'w_member_social',
],
'PROFILE_FIELDS': [
'id',
'firstName',
'lastName',
'emailAddress',
'email-address',
'profilePicture',
'public-profile-url',
],
'LOCATION_FIELDS': [
'location',
],
'POSITION_FIELDS': [
'company',
]
}
}
SOCIAL_AUTH_LINKEDIN_OAUTH2_KEY = 'secret' # App ID
SOCIAL_AUTH_LINKEDIN_OAUTH2_SECRET ='secret' #app key
以及register.html上的
{% extends "main/index.html" %}
{% load socialaccount %}
{% block content %}
<form method="post">{% csrf_token %}
<p>Datos Registro:</p>
{{ form.as_p }}
<input type="submit" value="Register">
</form>
If you have an account, <a href="login">login</a> instead.
<br>
<a href="{% provider_login_url "facebook" method="oauth2" %}">Facebook OAuth2</a>
<a href="{% provider_login_url "linkedin_oauth2" method="oauth2" %}">Linkedin OAuth2</a>
{% endblock %}
以及url.py应用程序的www.example.com上
urlpatterns = [
...
path('accounts/', include('allauth.urls')),
]
我想要的是代码自动存储的电子邮件项在auth_user.email列。我可以这样做与数据库上的触发器,但它不觉得正确的执行方式。
请帮助我成功地存储数据的Django的方式
3条答案
按热度按时间r6vfmomb1#
我没有正确检查情况。我试图存储的电子邮件已经在account_emailaddress上注册,该表对电子邮件列有唯一约束,因此我无法从其他socialaccount_socialaccount(用于存储社交网络中的注册用户的表)中保存相同的电子邮件。删除account_emailaddress中的条目解决了该问题。
紧接着,我在/accounts/linkedin_oauth2/login/callback/上遇到了一个ConnectionRefusedError,这个错误通过在www.example.com上编写代码得到了解决settings.py
就像上面说的https://github.com/pennersr/django-allauth/issues/1740。
tf7tbtn22#
Allauth通过
EmailAddress
对象为单个用户提供了存储多封电子邮件的功能,其中包含一个verified
字段和一个primary
字段。保存为主电子邮件的AllauthEmailAddress
对象将自动将电子邮件地址复制到用户模型上的email
字段中(在您的例子中是auth_user
)。因此,您可以执行类似以下的操作:from allauth.account.models import EmailAddress
email, created = EmailAddress.objects.get_or_create(user=request.user, email=
* 链接来源的电子邮件地址 *, verified=True, primary=True)
同样,关键是将
EmailAddress
上的primary
设置为True
,以便将电子邮件地址自动复制到用户模型的email
字段中。vecaoik13#
我在获取电子邮件时遇到了问题,并通过删除所有配置文件字段并将SOCIALACCOUNT_QUERY_EMAIL设置为True来解决此问题。现在,它们正确保存在用户数据中