Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- GITHUB_CLIENTID = 'my git client id'
- GITHUB_CLIENTSECRET = ' my git client secret'
- GITHUB_CALLBACK = 'http://example.com'
- class GithubOauthView(RedirectView):
- permanent = False
- url = None
- def get_access_token(self):
- '''
- use code to get access token
- '''
- code = self.request.GET.get('code')
- url = 'https://github.com/login/oauth/access_token'
- data = {
- 'grant_type': 'authorization_code',
- 'client_id': GITHUB_CLIENTID,
- 'client_secret': GITHUB_CLIENTSECRET,
- 'code': code,
- 'redirect_uri': GITHUB_CALLBACK,
- }
- data = urllib.urlencode(data)
- req = Request(url, data, headers={'Accept': 'application/json'})
- response = urlopen(req)
- result = response.read()
- result = json.loads(result)
- return result
- def get_user_info(self, access_token):
- url = 'https://api.github.com/user?access_token=%s' % (access_token)
- response = urlopen(url)
- html = response.read()
- data = json.loads(html)
- username = data['login']
- email = 'oauth@oauth.com'
- password = '********'
- try:
- user = User.objects.get(username=username)
- except:
- user = User.objects.create_user(username, email, password)
- user.save()
- user = authenticate(username=username, password=password)
- login(self.request, user)
- def get_redirect_url(self, *args, **kwargs):
- self.url = GITHUB_CALLBACK
- try:
- access_token_info = self.get_access_token()
- access_token = access_token_info['access_token']
- self.get_user_info(access_token)
- except:
- pass
- return super(GithubOauthView, self).get_redirect_url(*args, **kwargs)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement