我想使用Linkedin注册用户,以检索他们的姓名,姓氏和电子邮件。为此,我在Django上使用allauth。我可以注册名字和姓氏,但不能自动保存数据中的电子邮件。
在首页›社交帐户›社交帐户›“ the_user”关于额外数据:{“ elements”:[{“ handle”:“ urn:li:emailAddress:152954186”,“ handle〜”:{“ emailAddress” :“ example@example.com”}}],“名字”:{...。我可以看到该代码确实检索了电子邮件,但没有存储它。
从auth_user;(从数据库)中选择select *或在Home› Authentication and Authorization› Users中,我发现该代码不会自动存储电子邮件。我想代码会检索名字和姓氏,因为这些项不在数组内。
我的Linkedin应用程序具有r_emailaddress,r_liteprofile和w_member_social权限,并且我正在使用OAuth 2.0。
在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上
urlpatterns = [
...
path('accounts/', include('allauth.urls')),
]
我想要的代码是将电子邮件项自动存储在auth_user.email列中。我可以使用数据库触发器来做到这一点,但是执行这种方式并不适合。
请帮助我以Django方式成功存储数据
答案 0 :(得分:0)
Allauth通过EmailAddress
对象为一个用户存储多封电子邮件,该对象包括一个verified
字段和一个primary
字段。保存为主要电子邮件的Allauth EmailAddress
对象将在{时自动将电子邮件地址复制到user model(在您的情况下为email
)的auth_user
字段中。 {1}}对象已保存。因此,您可以执行以下操作:
EmailAddress
from allauth.account.models import EmailAddress
电子邮件地址_来自_链接_in email, created = EmailAddress.objects.get_or_create(user=request.user, email=
, verified=True, primary=True)
同样,关键是将if not created:
email.primary = True
email.save()
上的primary
设置为EmailAddress
,以便将电子邮件地址自动复制到{{3 }}。
答案 1 :(得分:0)
我没有适当检查情况。我尝试存储的电子邮件已经在 account_emailaddress 上进行了注册,该表在email列上具有唯一的约束,因此我无法从其他socialaccount_socialaccount保存该电子邮件(用于存储已注册用户的表来自社交网络)。从account_emailaddress删除条目可以解决该问题。
此后,我立即在/ accounts / linkedin_oauth2 / login / callback /处收到ConnectionRefusedError,该错误通过在settings.py上进行编码来解决
ACCOUNT_EMAIL_VERIFICATION = 'none'
如https://github.com/pennersr/django-allauth/issues/1740那边的状态。