tornado实现三方登录

提示:仅供参考

提示:以下是本篇文章正文内容,下面案例可供参考

一、使用步骤

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})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值