提示:仅供参考
提示:以下是本篇文章正文内容,下面案例可供参考
一、使用步骤
1.调用官方文档
代码如下(示例):
class Wburl(BaseHandler): def get(self): client_id = "" redirect_uri = "" # 微博平台地址 url = "https://api.weibo.com/oauth2/authorize?client_id=%s&redirect_uri=%s&response_type=code" % ( client_id, redirect_uri) return self.finish({"code": 200, 'url': url})
2.回调
代码如下(示例):
# 回调 class WeiboCallback(BaseHandler): def get(self): # 获取code code = self.get_query_argument("code") print("code", code) # 向access_token接口发送post请求 data = {"client_id": '', "client_secret": "", "grant_type": "authorization_code", 'redirect_uri': '', 'code': code} # 获取https://api.weibo.com/oauth2/access_token信息 token uid res = requests.post('https://api.weibo.com/oauth2/access_token', data=data) # 根据返回结果操作 # 先json转为字点获取token和uid message = json.loads(res.text) token = message['access_token'] uid = message['uid'] # 查询uid在数据库中是否存在,如果存在用用户信息生成jwt token返回 sql = "select user.id,user.mobile from sf_login inner join user on sf_login.userid=user.id where sf_login.uid='%s'" % ( str(uid)) user = db.findone(sql) # 如果存在 if user: # 生成jwt # 返回jwt token token = myjwt.jwt_encode( data={"data": {"uid": user['id'], "mobile": user['mobile'], 'exp': int(time.time())}}) # 生成token,跳转到vue中转页,前端中转页面不用做任何操作只保存token self.redirect("http://localhost:8080/updatetoken?token=" + token + "&userid=" + str(user['id'])) else: # 不存在,就跳转到绑定手机号页面 self.redirect("http://localhost:8080/wblogin?token=" + str(token) + "&uid=" + str(uid))
3.绑定手机号
代码如下(示例):
class Setsf(BaseHandler): def post(self): # 接收参数 data = json.loads(self.request.body) # 先判断手机号是否在用户表中存在 sql = "select * from user where mobile='%s'" % (data["mobile"]) res = db.findone(sql) if res: # 加入用户表 sql2 = "insert into sf_login(userid,webfrom,uid,token) values(%d,'weibo','%s','%s')" % ( int(res['id']), data['uid'], data['token']) db.add(sql2) db.commit() # 返回jwt token token = myjwt.jwt_encode( data={"data": {"uid": int(res['id']), "mobile": data['mobile'], 'exp': int(time.time())}}) return self.finish({"code": 200, "token": token, "userid": int(res['id'])}) else: # 加入用户表 sql = "insert into user(mobile) values('%s')" % (data['mobile']) userid = db.add(sql) print("userid>>>>", userid) # 加入三方登录表 sql2 = "insert into sf_login(userid,webfrom,uid,token) values(%d,'weibo','%s','%s')" % ( userid, data['uid'], data['token']) db.add(sql2) db.commit() # 返回jwt token token = myjwt.jwt_encode(data={"data": {"uid": userid, "mobile": data['mobile'], 'exp': int(time.time())}}) return self.finish({"code": 200, "token": token, "userid": userid})