Django-Allauth爬坑记
最近博客中用到django-allauth授权第三方登录,同时它也带有一个非常强大的邮箱验证功能。但是在最近发现授权第三方登录功能失效了,今天就来说说其中的猫腻。
一、先介绍下第三方授权方法
1.首先注册一个第三方授权账号,这里以GitHub为例。登录GitHub账号,在个人设置里面选择Developer settings
点击OAuth APPS
,新增一个OAuth APP
。进入页面后填写以下内容:点击确认保存,这时会得到Client ID和Client Secret就是要用到的凭证。
2.拿到凭证后进入Django后台进行配置,打开Sites,将example.com修改为博客域名。开发时则修改为本地IP:然后进入Social applications,添加一条applications如下:
二、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是报错了,如下:爬坑:根据报错信息提示是某个字典的键值错误,然后网上找了好多资料没有得到解决,然后认真观察说是注册的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楼 - 2 年,2月前
来学习了