Пример #1
0
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})
Пример #2
0
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()