前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用Python3.7+Tornado5.1集成新浪微博三方登录(无需企业资质)

使用Python3.7+Tornado5.1集成新浪微博三方登录(无需企业资质)

作者头像
用户9127725
发布2022-08-08 11:04:46
3460
发布2022-08-08 11:04:46
举报

    新浪微博:山寨版的twitter,各种粉丝的集散地,天朝人民的最爱,基本上网民都人手一个微博账号,所以使用新浪微博账号进行三方登录来提高用户登录体验就显得尤为重要,本次使用Python3+Tornado5来集成微博登录,记录一下,坑还是不少的。

    首先注册微博开放平台:https://open.weibo.com/

    选择微链接-》网站接入=>立即接入 新建一个应用

    应用创建成功后,会立即跳转审核页面,需要填写一些资质,用来进行审核,其实这些审核字段都不用搭理,应用压根就不需要通过审核

    只需要拿到appkey和appsecret即可,然后立即点击高级信息,填写回调网址

    需要注意一点,目前新浪对127.0.0.1需要进行安全校验,所以回调路由填一个随机ip就可以了,不一定是真实的,主要为了应对新浪的安全监测,见下图:

    那么新浪微博的登录逻辑很简单: 拼接url => 回调获取code => 利用code换取uid和access_token => 使用access_token获取用户信息

    首先第一步,拼接url,这里我们使用Tornado写控制器

代码语言:javascript
复制
#新浪微博登录地址组合返回(第一步)
class SinaFirstHandler(BaseHandler):

    def get(self,*args,**kwargs):

        #微博接口地址
        weibo_auth_url = "https://api.weibo.com/oauth2/authorize"
        #回调网址
        redirect_url = "http://127.0.0.1:8000/md_admin/weibo"
        #应用id
        client_id = "2636039333"
        #组合url
        auth_url = weibo_auth_url + "?client_id={client_id}&redirect_uri={re_url}".format(client_id=client_id,
                                                                                        re_url=redirect_url)
        self.write(auth_url)

    第二步,回调获取code,并且换取access_token和uid

代码语言:javascript
复制
#新浪微博回调地址(第二步)
class SinaBackHandler(BaseHandler):

    def get(self,*args,**kwargs):
        #获取回调的code
        code = self.get_argument('code')
        #微博认证地址
        access_token_url = "https://api.weibo.com/oauth2/access_token"
        #参数 向新浪接口发送请求
        re_dict = requests.post(access_token_url,data={
            "client_id": '2636039333',
            "client_secret": "4e2fbdb39432c31dc5c2f90be3afa5ce",
            "grant_type": "authorization_code",
            "code": code,
            "redirect_uri": "http://127.0.0.1:8000/md_admin/weibo",
        })

        re_dict = re_dict.text
        re_dict = eval(re_dict)
        print(re_dict.get('uid'))

        self.write(re_dict)

     接下来的情况就有点操蛋了,因为新浪规定应用如果不通过审核,那么新浪有些接口无权限请求的,可以说你手里只有access_token和uid,却换不到别的东西,怎么办呢,没有人会闲的没事为了测试接口就去弄个营业执照,但是有一个曲线救国的方法,就是在测试信息页面来添加测试账号,添加好测试账号之后,就可以请求相应的接口

    最后,利用手里的access_token和uid来获取当前用户的用户名

代码语言:javascript
复制
result = requests.get('https://api.weibo.com/2/users/show.json',params={'access_token':res['access_token'],'uid':res['uid']})

result = json.loads(result.text)
print(result['name'])

     可以看到接口请求成功

    搞定收工。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-03-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
访问管理
访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档