1. 申请微博应用
微博开放平台:http://open.weibo.com/authentication
1、微博账号登录开放平台,选择:微连接 --> 网站接入 ---> 立即接入 ---> 创建新应用:
2、 OAuth2.0
授权设置,正常情况下需要经过审核后才可以让第三方登录,不过我们可以使用测试模式来完成实现。
点击 我的应用 ---> 应用信息 ---> 测试信息 ---> 添加测试账号(用于后续登录,使用你的微博账号就行)
点击 高级信息 配置 授权回调页:
2. social_django 集成第三方登录
social_django
:https://github.com/python-social-auth/social-app-django
1、安装 social_django
:
# pipenv install social_django --skip-lock
pip install social_django
2、settings INSTALL_APP
中添加 social_django
:
INSTALLED_APPS = [
....
'social_django',
]
3、social_django
会创建五张数据表,在授权登录成功后会在用户信息表 UserProfile
和 social_auth_usersocialauth
表中分别保存用户信息:
python manage.py migrate # 生成表
# 生成的五张表
# social_auth_association
# social_auth_code
# social_auth_nonce
# social_auth_partial
# social_auth_usersocialauth
4、配置认证后端 settings
:
# jwt 自定义用户认证
AUTHENTICATION_BACKENDS = (
'users.views.CustomBackend',
# 第三方登录:设置邮箱、用户名和手机号均可登录
'social_core.backends.weibo.WeiboOAuth2', # 微博认证后端
'social_core.backends.qq.QQOAuth2', # QQ 认证后端
'social_core.backends.weixin.WeixinOAuth2', # 微信认证后端
'django.contrib.auth.backends.ModelBackend', # 使用了`django.contrib.auth`应用程序,支持帐密认证
)
5、配置模板 settings
:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')]
,
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
# 新增:第三方登录
'social_django.context_processors.backends',
'social_django.context_processors.login_redirect',
],
},
},
]
6、配置路由 MxShop/urls.py
:
# 第三方登录
path('', include('social_django.urls', namespace='social')),
7、配置 APP Secret、App key
和登录成功跳转页settings
:
# 第三方登录,里面的值是你的开放平台对应的值
SOCIAL_AUTH_WEIBO_KEY = '7886781xxx75'
SOCIAL_AUTH_WEIBO_SECRET = '0529e2d88a9d5f3461af7537xxxxxxx37c6959'
# SOCIAL_AUTH_QQ_KEY = 'xxxxxxx'
# SOCIAL_AUTH_QQ_SECRET = 'xxxxxxx'
#
# SOCIAL_AUTH_WEIXIN_KEY = 'xxxxxxx'
# SOCIAL_AUTH_WEIXIN_SECRET = 'xxxxxxx'
# 第三方登录成功后跳转到首页
SOCIAL_AUTH_LOGIN_REDIRECT_URL = '/index/'
注意:以上信息在微博开发平台应用信息中可查看。
8、配置上述后,授权登录时发现仍未登录,需要对源码进行修改:
# 找到 social_core/actions.py,修改其源码,配置登陆成功后跳转
cd /root/.local/share/virtualenvs/MxShop-_d0NptB3/lib/python3.6/site-packages/social_core
vim actions.py
social_core/actions.py
:
from rest_framework_jwt.serializers import jwt_payload_handler, jwt_encode_handler
def do_complete(backend, login, user=None, redirect_name='next',
*args, **kwargs):
....
if backend.setting('SANITIZE_REDIRECTS', True):
allowed_hosts = backend.setting('ALLOWED_REDIRECT_HOSTS', []) +
[backend.strategy.request_host()]
url = sanitize_redirect(allowed_hosts, url) or
backend.setting('LOGIN_REDIRECT_URL')
# 注释
# return backend.strategy.redirect(url)
# 添加以下代码
# 修改源码适配 drf
response = backend.strategy.redirect(url)
payload = jwt_payload_handler(user)
response.set_cookie('name', user.name if user.name else user.username, max_age=24*3600)
response.set_cookie('token', jwt_encode_handler(payload), max_age=24*3600)
return response
9、访问:http://192.168.131.131:8000/login/weibo/
进行测试:
登录成功后,可查看 UserProfile
和 social_auth_usersocialauth
中的用户信息。