Обновления в accounts: модели, представления, миграции и новый бэкенд
This commit is contained in:
@@ -11,30 +11,51 @@ from django.contrib.auth.tokens import default_token_generator
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.contrib.auth import update_session_auth_hash
|
||||
from django.contrib.auth.forms import PasswordChangeForm
|
||||
from django.db import connection
|
||||
from .forms import PasswordResetForm
|
||||
from .models import CustomUser
|
||||
import uuid
|
||||
|
||||
|
||||
def login_view(request):
|
||||
"""
|
||||
Страница входа для пользователей тенанта (CustomUser).
|
||||
|
||||
SECURITY: Работает ТОЛЬКО на tenant доменах!
|
||||
На public домене перенаправляет на страницу логина PlatformAdmin.
|
||||
"""
|
||||
# Проверяем что мы НЕ на public домене
|
||||
schema_name = getattr(connection, 'schema_name', 'public')
|
||||
if schema_name == 'public':
|
||||
messages.info(
|
||||
request,
|
||||
'Вход для пользователей магазинов доступен только на домене вашего магазина. '
|
||||
'Если вы администратор платформы, используйте /platform/login/'
|
||||
)
|
||||
return redirect('platform_admin:login')
|
||||
|
||||
if request.method == 'POST':
|
||||
email = request.POST.get('email')
|
||||
password = request.POST.get('password')
|
||||
|
||||
|
||||
# Используем email как логин
|
||||
user = authenticate(request, username=email, password=password)
|
||||
|
||||
|
||||
if user is not None:
|
||||
if user.is_email_confirmed: # Проверяем, подтвержден ли email
|
||||
login(request, user)
|
||||
# Проверяем, что это CustomUser (пользователь магазина), а не PlatformAdmin
|
||||
if not isinstance(user, CustomUser):
|
||||
# Не раскрываем информацию о существовании других типов пользователей
|
||||
messages.error(request, 'Пользователь не найден.')
|
||||
elif not user.is_email_confirmed:
|
||||
messages.error(request, 'Пожалуйста, подтвердите ваш email для входа.')
|
||||
else:
|
||||
login(request, user, backend='accounts.backends.TenantUserBackend')
|
||||
# Перенаправляем на главную страницу после успешного входа
|
||||
next_page = request.GET.get('next', 'index') # Если есть параметр next, переходим туда
|
||||
return redirect(next_page)
|
||||
else:
|
||||
messages.error(request, 'Пожалуйста, подтвердите ваш email для входа.')
|
||||
else:
|
||||
messages.error(request, 'Неверный email или пароль.')
|
||||
|
||||
|
||||
return render(request, 'login.html')
|
||||
|
||||
|
||||
@@ -203,9 +224,9 @@ def password_setup_confirm(request, token):
|
||||
registration.password_setup_token_created_at = None
|
||||
registration.save()
|
||||
|
||||
# Автоматический вход
|
||||
# Автоматический вход (используем TenantUserBackend)
|
||||
connection.set_tenant(tenant)
|
||||
login(request, owner, backend='django.contrib.auth.backends.ModelBackend')
|
||||
login(request, owner, backend='accounts.backends.TenantUserBackend')
|
||||
|
||||
messages.success(
|
||||
request,
|
||||
|
||||
Reference in New Issue
Block a user