def user_update_view(request): user = User.objects.get(email=request.user.email) form = UserUpdateForm(request.POST or None, request.FILES or None, instance=user) if 'code' in request.GET: try: state = request.GET['state'] source = 'facebook' except KeyError: source = 'vkontakte' code = request.GET['code'] if source == 'vkontakte': try: access_token, user_id = vkontakte.auth_code(code, reverse('user_update_view')) except vkontakte.AuthError as e: messages.warning(request, u'Ошибка OAUTH авторизации {}'.format(e), extra_tags='integration') return redirect('user_update_view') try: user = User.objects.get(vkuserid=user_id) messages.warning(request, 'Этот аккаунт ВКонтакте уже связан с профилем', extra_tags='integration') return redirect('user_update_view') except User.DoesNotExist: user = User.objects.get(email=request.user.email) user.vkuserid = user_id user.save() messages.success(request, "Профиль ВКонтакте прикреплен", extra_tags='integration') return redirect('user_update_view') elif source == 'facebook': try: access_token = facebook.auth_code(code, reverse('user_update_view')) user_id = facebook.user_id(access_token) except vkontakte.AuthError as e: messages.warning(request, u'Ошибка OAUTH авторизации {}'.format(e), extra_tags='integration') return redirect('user_update_view') try: user = User.objects.get(fbuserid=user_id) messages.warning(request, 'Этот аккаунт Facebook уже связан с профилем', extra_tags='integration') return redirect('user_update_view') except User.DoesNotExist: user = User.objects.get(email=request.user.email) user.fbuserid = user_id user.save() messages.success(request, "Профиль Facebook прикреплен", extra_tags='integration') return redirect('user_update_view') elif request.POST: if form.is_valid(): form.save() messages.success(request, "Успешно сохранено!", extra_tags='info') return redirect('user_update_view') else: messages.warning(request, "Некорректные данные", extra_tags='info') return render(request, 'user_update.html', {'form': form, 'pass_form': ChangePasswordForm})
def login_view(request): if request.user.is_authenticated(): return redirect('index_view') shortcut = lambda: render(request, 'login.html', {"form": form}) return_path = request.META.get('HTTP_REFERER', '/') if request.method == "POST": form = UserLoginForm(request.POST or None) if form.is_valid: email = request.POST.get('email', '') password = request.POST.get('password', '') user = auth.authenticate(username=email, password=password) # TODO: добавить условия, при которых юзер не может залогиниться if user: if not user.banned: auth.login(request, user) return redirect(return_path) else: messages.warning(request, "Ваш профиль забанен!") return shortcut() else: messages.warning(request, "Введенные данные неверны!") return shortcut() else: messages.warning(request, "Введенные данные некорректны!") return shortcut() elif 'code' in request.GET: try: state = request.GET['state'] source = 'facebook' except KeyError: source = 'vkontakte' code = request.GET['code'] form = UserLoginForm(request.POST or None) if source == 'vkontakte': try: access_token, user_id = vkontakte.auth_code(code, reverse('login_view')) except vkontakte.AuthError as e: messages.warning(request, u'Ошибка OAUTH авторизации {}'.format(e)) return shortcut() try: user = User.objects.get(vkuserid=user_id) # Bug fix user.last_login = timezone.now() user.save() user.backend = 'django.contrib.auth.backends.ModelBackend' auth.login(request, user) return redirect(return_path) except User.DoesNotExist: messages.warning(request, 'Такой пользователь не найден') return shortcut() elif source == 'facebook': try: access_token = facebook.auth_code(code, reverse('login_view')) print(access_token) user_id = facebook.user_id(access_token) print(user_id) except vkontakte.AuthError as e: messages.warning(request, u'Ошибка OAUTH авторизации {}'.format(e), extra_tags='integration') return shortcut() try: user = User.objects.get(fbuserid=user_id) except User.DoesNotExist: messages.warning(request, 'Такой пользователь не найден') return shortcut() user.last_login = timezone.now() user.save() user.backend = 'django.contrib.auth.backends.ModelBackend' auth.login(request, user) return redirect(return_path) else: form = UserLoginForm(request) return shortcut()