为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Django 中使用 allauth 从 Linkedin 获取 emailAddress?

如何在 Django 中使用 allauth 从 Linkedin 获取 emailAddress?

慕田峪7331174 2021-12-16 15:55:19
我想使用 Linkedin 注册用户,以检索他们的姓名、姓氏和电子邮件。为此,我在 Django 上使用 allauth。我可以注册名字和姓氏,但我无法从数据中自动保存电子邮件。查看主页 › 社交帐户 › 社交帐户 › “the_user” on Extra data: {"elements": [{"handle": "urn:li:emailAddress:152954186", "handle~": {"emailAddress": "example @example.com"}}], "firstName": { ... . 我可以看到代码确实检索了电子邮件,但它没有存储它。签入 select * from auth_user;(from database) 或在 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 = TrueSOCIALACCOUNT_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 IDSOCIAL_AUTH_LINKEDIN_OAUTH2_SECRET ='secret' #app key
查看完整描述

2 回答

?
眼眸繁星

TA贡献1873条经验 获得超9个赞

我没有正确检查情况。我尝试存储的电子邮件已经在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


查看完整回答
反对 回复 2021-12-16
?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

Allauth 提供了通过EmailAddress对象为单个用户存储多封电子邮件,其中包括一个verified字段和一个primary字段。EmailAddress保存为主要电子邮件的 Allauth对象将在保存对象时将电子邮件地址自动复制到用户模型email上的字段(在您的情况下)。因此,您可以执行以下操作:auth_userEmailAddress

from allauth.account.models import EmailAddress

email, created = EmailAddress.objects.get_or_create(user=request.user, email=email_address_from_linked_in, verified=True, primary=True)

if not created:
    email.primary = True
    email.save()

再次,关键是要设置primaryEmailAddressTrue为了有自动复制到的电子邮件地址email中的字段用户模型


查看完整回答
反对 回复 2021-12-16
  • 2 回答
  • 0 关注
  • 203 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号