Vinli平台的Tornado Web身份验证。
vinli_tornado_auth的Python项目详细描述
安装
pip install vinli-tornado-auth
设置要求
在https://dev.vin.li注册并创建应用程序
在应用程序中,创建一个webclient类型并注意 以下值:
- vinli_client_id-应用程序客户端ID
- vinli_client_secret-应用程序客户端机密
- vinli_redirect_uri-要重定向到的有效url。例如:http://localhost:8000/auth/login
将这些值添加到应用程序settings。
示例用法
import tornado.escape import tornado.ioloop import tornado.gen import tornado.web from vinli_tornado_auth.auth import VinliAuthLoginMixin class LoginHandler(tornado.web.RequestHandler, VinliAuthLoginMixin): """ Handle /auth/login """ @tornado.gen.coroutine def get(self): code = self.get_argument('code', None) if not code: yield self.authorize_redirect( redirect_uri=self.settings['vinli_redirect_uri'], client_id=self.settings['vinli_client_id'], response_type='code' ) else: access = yield self.get_authenticated_user( redirect_uri=self.settings['vinli_redirect_uri'], code=code ) user = yield self.oauth2_request( self._OAUTH_USERINFO_URL, access_token=access['access_token'] ) self.set_secure_cookie( 'user', tornado.escape.json_encode({ 'user': user, 'token': access['access_token'] }) ) self.redirect('/') class IndexHandler(tornado.web.RequestHandler, VinliAuthLoginMixin): """ Handle / """ def get_current_user(self): user = self.get_secure_cookie('user') if not user: return None return tornado.escape.json_decode(user) @tornado.web.authenticated @tornado.gen.coroutine def get(self): devices = yield self.vinli_request( 'platform', '/api/v1/devices', access_token=self.current_user.get('token') ) self.write(devices) class Application(tornado.web.Application): def __init__(self): settings = { 'vinli_client_id': 'abc123', 'vinli_client_secret': "shhhh it is secret", 'vinli_redirect_uri': 'http://localhost:8000/auth/login', 'cookie_secret': '12345', } urls = [ (r'/', IndexHandler), (r'/auth/login', LoginHandler), ] super(Application, self).__init__(urls, **settings) if __name__ == '__main__': app = Application() app.listen(8000) tornado.ioloop.IOLoop.instance().start()
发出经过身份验证的请求
使用vinli_request方法向 初始身份验证完成后的平台。
为设备获取行程
就像following example 从Vinli API文档中,设备ID的跳闸列表 fe4bbc20-cc90-11e3-8e05-f3abac5b6b58可以通过以下方式检索:
@tornado.web.authenticated @tornado.gen.coroutine def get(self): trips = yield self.vinli_request( 'trips', '/api/v1/devices/fe4bbc20-cc90-11e3-8e05-f3abac5b6b58/trips', access_token=self.current_user.get('token') ) self.write(trips)