首先进去新浪微博开放平台注册应用
点击其他进入
点击创建
微博会给你 App Key和App Secret,这两个要保存下来
点击左侧高级信息,然后进去点击编辑
这时会让你自己设置回调路由和取消授权的路由,回调路由是当你用第三方登录时,微博会给你返回 一个code,这个code会返回到这个路由上,这个路由是vue路由,也就是一个vue前端页面
将回调路由保存下来(这里只用到了回调路由)
好啦,现在准备工作已经做好了,开始做咯
先给大家看一幅流程图
流程大概是这样
- 客户端访问微博登录页面,微博认证成功会将 code 返回给回调页面
- 回调页面拿着 code 访问后台
- 后台将 App Key,App Secret,回调路由,code封装好,发起获取uid的post请求时一起将这些参数带去
- 微博会将 uid和access_token返回给后台,后台用uid去三方社交表查询是否有这个uid,有就代表以前登录过,直接创建token,username,user_id返回给回调页,如果表里没有uid,说明第一次登录就先将uid和access_token返回给回调页
- 回调页以200状态判定返回的是token等参数,将token等数据保存,跳首页面,登录成功。
- 回调页判定返回的是uid,access_token,这时其实用户是被第三方认证过的,我们需要在自己本地数据库保存用户基本信息,所以讲uid等参数保存浏览器跳到用户绑定页面。
- 用户绑定页面携带uid,access_token再次访问后台,后台带着这些参数访问微博获取用户基本信息
- 得到相应,后台将用户基本信息入库用户表,用户社交表,然后生成token,username,user_id返回绑定页面,绑定页面将token等数据保存到浏览器跳首页,登录成功
token,username,user_id保存的位置
下面该实现代码了
用户表就不说啦,上面说到设计到三方登录,需要一个第三方社交表关联用户表
# 第三方社交表
class SocialUser(models.Model):
# 这个字段是关联用户表的外键
user = models.ForeignKey(Users,on_delete=models.CASCADE,verbose_name='用户',related_name='user_info')
# 这个不是个字段,属于二元组,1就代表的PC,真正入库的是 int
platfrom_type_choices = (
(1,'PC'),
(2,'Androia'),
(3,'IOS'),
)
platfrom_id = models.IntegerField(max_length=1,choices=platfrom_type_choices,verbose_name='平台类型')
platfrom_choices = (
(1,'QQ'),
(2,'微博'),
(3,'微信'),
)
platfrom_type = models.IntegerField(max_length=1,choices=platfrom_choices,verbose_name='社交平台')
uid = models.CharField(max_length=100,verbose_name='用户社交id')
class Meta:
db_table = 'socialuser'
verbose_name_plural = '用户社交表'
数据库迁移:
把微博返回的几个参数配置到settings里
# 配置微博返回的参数
WEIBO_APP_KEY = '3312233733'
WEIBO_APP_SECRET = 'c88e0c5e4abe66e89f48897