Я борюсь с моей системой входа в систему. В этот момент я наблюдал так много разных вещей о топи c, что немного растерялся. Я попытался использовать встроенную систему аутентификации, но мне не удалось заставить ее работать с django -тендантом, потому что, если я правильно понимаю, это требует работы со встроенной моделью User.
Тогда я предполагаю, что мои основные проблема в том, что я не знаю, как интегрировать Django модель пользователя с тем, что у меня есть. С другой стороны, я не знаю, как написать что-то, что заменило бы встроенную систему аутентификации в Django.
В идеале я хотел бы объединить то, что у меня есть, со Django встроенным пользователем для безопасной работы. и безопасная система аутентификации.
Вот то, что я до сих пор придумывал самостоятельно. он «работает», но явно ничего не делает!
Model.py
class Client(TenantMixin):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=100, default='')
email = models.EmailField(default='')
company = models.CharField(max_length=100, default='')
password = models.CharField(max_length=100, default='')
created_on = models.DateField(auto_now_add=True)
class Domain(DomainMixin):
pass
forms.py
class UserLoginForm(forms.Form):
email = forms.CharField()
password = forms.CharField(widget = forms.PasswordInput)
company = forms.CharField()
def cleaned_data(self):
email = self.cleaned_data.get('email')
password = self.cleaned_data.get('password')
company = self.cleaned_data.get('company')
try:
tenant = Client.objects.get(email=email, password=password, company=company)
except Client.DoesNotExist:
raise forms.ValidationError("User does not exist")
if email and password:
user = authenticate(username= email, password= password)
if not user:
raise forms.ValidationError('THIS USER DOES NOT EXIST')
if not user.check_password(password):
raise forms.ValidationError('incorrect password')
if not user.is_active:
raise forms.ValidationError('this user is not active')
return super(UserLoginForm, self).clean()
views.py
def login_view(request):
form = UserLoginForm(request.POST or None)
if form.is_valid():
company = form.cleaned_data.get('company')
email = form.cleaned_data.get('email')
password = form.cleaned_data.get('password')
##tenant = authenticate(request, username=email, password=password)
with schema_context(tenant.schema_name):
redirect = 'http://' + tenant.company + '.inventory4.com:8000/upload'
return HttpResponseRedirect(redirect)
context = {
'form' : form,
}
return render(request, 'login.html', context)