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

我想使用 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 = 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


慕田峪7331174
浏览 204回答 2
2回答

眼眸繁星

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

慕盖茨4494581

Allauth 提供了通过EmailAddress对象为单个用户存储多封电子邮件,其中包括一个verified字段和一个primary字段。EmailAddress保存为主要电子邮件的 Allauth对象将在保存对象时将电子邮件地址自动复制到用户模型email上的字段(在您的情况下)。因此,您可以执行以下操作:auth_userEmailAddressfrom allauth.account.models import EmailAddressemail, 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()再次,关键是要设置primary上EmailAddress是True为了有自动复制到的电子邮件地址email中的字段用户模型。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python