Django-Allauth爬坑记

日期:2022年3月19日 18:43 作者:adminBY 阅读(1400) 评论(1)

最近博客中用到django-allauth授权第三方登录,同时它也带有一个非常强大的邮箱验证功能。但是在最近发现授权第三方登录功能失效了,今天就来说说其中的猫腻。

一、先介绍下第三方授权方法

1.首先注册一个第三方授权账号,这里以GitHub为例。登录GitHub账号,在个人设置里面选择Developer settings点击OAuth APPS,新增一个OAuth APP。进入页面后填写以下内容:image点击确认保存,这时会得到Client ID和Client Secret就是要用到的凭证。 2.拿到凭证后进入Django后台进行配置,打开Sites,将example.com修改为博客域名。开发时则修改为本地IP:image然后进入Social applications,添加一条applications如下:image

二、django-allauth安装配置

1.安装django-allauth: pip install django-allauth 2.修改配置文件:

my_blog/settings.py

...


TEMPLATES = [
    {
        ...
        'OPTIONS': {
            'context_processors': [
                # allauth 启动必须项
                'django.template.context_processors.request',
            ],
        },
    },
]


AUTHENTICATION_BACKENDS = (
    # Django 后台可独立于 allauth 登录
    'django.contrib.auth.backends.ModelBackend',

    # 配置 allauth 独有的认证方法,如 email 登录
    'allauth.account.auth_backends.AuthenticationBackend',
)


INSTALLED_APPS = [
    ...
    # allauth 启动必须项
    'django.contrib.auth',
    'django.contrib.messages',
    'django.contrib.sites',

    'allauth',
    'allauth.account',
    'allauth.socialaccount',

    # 可添加需要的第三方登录
    'allauth.socialaccount.providers.github',
    'allauth.socialaccount.providers.weibo',
    ...
]

# 设置站点
SITE_ID = 1

# 登录成功后重定向地址
LOGIN_REDIRECT_URL = '/article/article-list'

...

3.最后一步是迁移数据: python manage.py migrate 经过上面步骤django-allauth算是安装配完成了,接下来授权登录GitHub是报错了,如下:image爬坑:根据报错信息提示是某个字典的键值错误,然后网上找了好多资料没有得到解决,然后认真观察说是注册的callback函数API接口错误,然后查看GitHubAPI开发文档发现从2020年开始API不再接受通过URI查询参数的验证方式,改用Oauth2.0/access token方式获取请求。curl -H 'Authorization: token my_access_token' https://api.github.com/user/repos 简单的说就是API的请求方式改变了,那怎么解决这个问题呢?经过来回思考决定升级django-allauth是最简单的方法,之前一直用的是django-allauth 0.33.0版本。去官方repository看最新版本已经更新到了0.4,我这里是下载的0.43.0。经过本人亲测完美解决了报错问题。 可见在学习的道路上没有捷径可言,未有不断的探索和试错才能使自己在变得更强壮。


您未登录,请登录注册后评论

1 人参与 | 1 评论
大哥级别的
回复

大哥级别的

1楼 - 2 年,1月前

来学习了