Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import requests
- from django.shortcuts import render
- from django.views.generic import TemplateView
- from django.conf import settings
- from django.urls import reverse
- from django.shortcuts import redirect
- from django.contrib.auth.models import User
- from django.contrib.auth import login, logout
- from django.db import transaction
- from django.db import IntegrityError
- from vk_auth.models import VkAuth
- from vk.interface import VkApiInterface
- from vk.exceptions import (AppException)
- class AuthView(TemplateView):
- template_name = 'auth/index.html'
- def get(self, request, *args, **kwargs):
- context = {
- 'vk_url': settings.VK_AUTH_URL,
- 'client_id': settings.VK_APP_ID,
- 'redirect_url': request.build_absolute_uri(reverse('verify_vk_auth'))
- }
- return self.render_to_response(context)
- def create_or_authenticate_user(request):
- code = request.GET.get('code')
- auth_info = VkApiInterface.verify_user_auth(code, request.build_absolute_uri(reverse('verify_vk_auth')))
- access_token = auth_info['access_token']
- expires_in = auth_info['expires_in']
- user_id = auth_info['user_id']
- try:
- vk_auth = VkAuth.objects.get(user__username=user_id)
- vk_auth.vk_token = access_token
- vk_auth.expires_in = expires_in
- vk_auth.save()
- user_model = vk_auth.user
- except VkAuth.DoesNotExist:
- try:
- with transaction.atomic():
- user_model = User.objects.create(username=user_id, password=code)
- vk_auth = VkAuth.objects.create(user=user_model, vk_token=access_token, expires_in=expires_in)
- except IntegrityError as e:
- raise AppException(e)
- return user_model
- def logout_view(request, *args, **kwargs):
- if request.user.is_authenticated:
- logout(request)
- return redirect('auth_index')
- def verify_vk_auth(request, *args, **kwargs):
- try:
- user_model = create_or_authenticate_user(request)
- login(request, user_model)
- return redirect('index')
- except AppException as e:
- return render(request, 'error.html', {'error': getattr(e, 'inner_code'),
- 'error_description': getattr(e, 'message')})
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement