Oauth2.0 笔记

最近在折腾tornado与新浪微博的结合。写了一点oauth的mixin放到了 https://gist.github.com/1568666,有需要的朋友可以看看。

其中包含新浪微博oauth1.0与oauth2.0的版本。

由于各方面的原因还是推荐使用2.0版本,但是由于新浪单方面不提供refresh_token,所以session有效期只有24小时,这点相当让人讨厌,让我们鄙视下新浪吧。嗯

一些小提示:

2.0版本提供了对图片上传的支持,需要注意的是读取图片的时候记得‘rb’

oauth2.0验证登录的时候必须指定redirect_url,这个url需要在新浪应用设置,然后程序中必须与设置一样。如有需要设置oauth回调时附带一些额外参数,可在authorize_redirect调用时将参数放进state,例子如下:

 class WeiboAuthHandler(tornado.web.RequestHandler, WeiboMixin):
     @tornado.web.asynchronous
     def get(self):
         next = self.get_argument("next",None)
         state = self.get_argument("state", None)
         redirect_uri = self.settings["weibo_redirect_uri"]
         if self.get_argument("code", None):
             self.get_authenticated_user(
                 redirect_uri=redirect_uri,
                 client_id=self.settings["weibo_consumer_key"],
                 client_secret=self.settings["weibo_consumer_secret"],
                 code=self.get_argument("code"),
                 callback=self.async_callback(self._on_auth,state),
                 )
             return
         if next:
             self.authorize_redirect(redirect_uri=redirect_uri,
                                     client_id=self.settings["weibo_consumer_key"],
                                     client_secret=self.settings["weibo_consumer_secret"],
                                     extra_params={"state":next})#传递next参数
         else:
             self.authorize_redirect(redirect_uri=redirect_uri,
                                     client_id=self.settings["weibo_consumer_key"],
                                     client_secret=self.settings["weibo_consumer_secret"])
    
     def _on_auth(self, next, user):
         if not user:
             raise error
         #do something
         return self.redirect(urllib.unquote(next)) if next else self.redirect("/")

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。