oauth2py

a simple, lightweight oauth client


License
MIT-feh
Install
pip install oauth2py==1.1.5

Documentation

oauth2py

PyPI version Build Status Coverage Status

a simple, lightweight oauth client

require

  • python 2.7+
  • python 3.3+

supported

  • Weibo
  • QQ
  • Facebook
  • Github
  • Twitter
  • Other...

useage

  1. create client

    • put oauth2py.json in your app root folder
    [{
        "name": "github",
        "client_id": "",
        "client_secret": "",
        "redirect_uri": "",
        "scope": ""
    },
    {
        "name": "twitter",
        "client_id": "",
        "client_secret": "",
        "redirect_uri": "",
        "scope": ""
    }]
    from oauth2py.client import OauthClient as oauth
    
    github = oauth.load('github')
    • or set config in code
    github.init({
        'client_id': '',
        'client_secret': '',
        'redirect_uri': '',
        'scope': ''
    })
  2. oauth

    1. get login url
    url = github.get_login_url(state='abc')
    1. get user info
    user = github.get_user_info('code=12345&state=abc')
    # or
    user = github.get_user_info({'code': '12345', 'state': 'abc'})
    1. save access token
    token = github.get_access_token()
    # save token ...
  3. access resource

    • get github repo list
    github.set_access_token({
        'access_token': '...'
    })
    github.access_resource(
            'GET', 'https://api.github.com/user/repos')
    • another example: post status to twitter
    twitter.set_access_token({
            'access_token': '...',
            'access_token_secret': '...'
        }
    )
    twitter.access_resource(
        'POST',
        url='https://api.twitter.com/1.1/statuses/update.json',
        data={
            'status': 'test from oauth2py!'
        }
    )

implement new providers

  • inherit oauth2py.Oauth2 or oauth2py.Oauth and set oauth urls

    class Github(Oauth2):
    
        NAME = 'Github'
        AUTHORIZATION_URL = 'https://github.com/login/oauth/authorize'
        ACCESS_TOKEN_URL = 'https://github.com/login/oauth/access_token'
        GET_USERINFO_URL = 'https://api.github.com/user'
    
        def __init__(self):
            super(Github, self).__init__()
    
  • parse user info from response

    def parse_user_info(self, response):
        return {
            'uid': str(response.get('id')),
            'name': response.get('name'),
            'avatar': response.get('avatar_url'),
            'raw': response
        }