首先:
注册微博开放平台:https://open.weibo.com/
ps:个人感觉平台做的很烂
选择微链接-》网站接入=>立即接入 新建一个应用
注册过程略过
只需要拿到appkey和appsecret即可,然后立即点击高级信息,填写回调网址
注意:回调授权和取消回调授权地址需要一致
那么新浪微博的登录逻辑很简单: 拼接url => 回调获取code => 利用code换取uid和access_token => 使用access_token获取用户信息
前端代码:
// 跳转到新浪微博
sinalogin:function(){
// 应用id client_id=2636039333
//redirect_url: 回调网址
// 拼接新浪url
let url = "https://api.weibo.com/oauth2/authorize?client_id=2636039333&redirect_uri=http://127.0.0.1:8000/weibo";
// 进行站外跳转
window.location.href = url;
},
后端代码:
# 定义微博回调视图
def wb_back(request):
# 获取回调的code
code = request.GET.get('code')
# 定义认证地址
access_token_url = 'https://api.weibo.com/oauth2/access_token'
# 发起请求,交换sina的id
re_dict = requests.post(
access_token_url,
data={
"client_id": '2636039333', # 应用id
"client_secret": "*************************", # 密钥
"grant_type": "authorization_code", # 授权方式
"code": code, # code
"redirect_uri": "http://127.0.0.1:8000/weibo_back" # 回调网址
}
)
# 获取返回值
re_dict = re_dict.text
# 强转
re_dict = eval(re_dict)
print(re_dict)
# 判断是否为第一次登陆
user = User.objects.filter(username=str(re_dict['uid'])).first()
if user:
# 代表曾经用过新浪登录
sina_id = user.username
user_id = user.id
else:
# 代表首次登陆
user = User(username=str(re_dict['uid']),password='')
# 保存入库
user.save()
sina_id = str(re_dict['uid'])
# 查询用户id
user = User.objects.filter(username=str(re_dict['uid'])).first()
user_id = user.id
#进行跳转
return redirect('http://localhost:8080?sina_id='+str(sina_id)+'&uid='+str(user_id))