I tried to implement customized user login/ Registration in django. but only one user can be logged in but not anyother user are logged in. Registration area looks fine cause user can register easily.
These are my codes I guess there is problem with CSRF token but i dont know where to update it In view Register
def registerPage(request):
form = UserForm()
if request.method == 'POST':
print(request.POST)
form = UserForm(request.POST)
if form.is_valid():
user = form.save(commit=False)
user.user_name = user.user_name.lower()
user.save()
login(request, user)
return redirect('home')
else:
messages.error(request, 'An error occured duing registration!!')
return render(request, 'base/login_register.html', {'form': form})
My Views Login
def loginPage(request):
page = "login"
if request.user.is_authenticated:
return redirect('home')
if request.method == "POST":
email = request.POST.get('email').lower()
password = request.POST.get('password')
try:
user = NewUser.objects.get(email=email)
except:
messages.error(request, 'User doesnot exist')
user = authenticate(request, email=email, password=password)
if user is not None:
login(request, user)
print("mess going on here!")
return redirect("home")
else:
messages.error(request, "Email or Password doesnot exit")
context = {'page': page}
return render(request, 'base/login_register.html', context)
Forms.py
from tkinter import Widget
from django.forms import ModelForm
from .models import NewUser
class UserForm(ModelForm):
class Meta:
model = NewUser
fields=['email','user_name','first_name','country','address','year_in_school','about','avatar']
def __init__(self, *args, **kwargs):
super(UserForm, self).__init__(*args, **kwargs)
self.fields['email'].widget.attrs.update({'class': 'form-control'})
# self.fields['email','user_name','first_name','country','address','year_in_school','about'].widget.attrs.update({'class': 'form-control'})
self.fields['user_name'].widget.attrs.update({'class': 'form-control'})
self.fields['first_name'].widget.attrs.update({'class': 'form-control'})
self.fields['country'].widget.attrs.update({'class': 'form-control'})
self.fields['address'].widget.attrs.update({'class': 'form-control'})
self.fields['year_in_school'].widget.attrs.update({'class': 'form-control'})
self.fields['about'].widget.attrs.update({'class': 'form-control'})
Login/Register.html
<form
method="POST"
action=""
class="form-contact"
data-toggle="validator"
novalidate="true"
>
{% csrf_token %}
<div class="col-sm-6 col-md-6">
<div class="form-group">
<input
type="text"
class="form-control"
id="p_name"
name="email"
placeholder="Enter Email"
required=""
/>
<div class="help-block with-errors"></div>
</div>
</div>
<div class="col-sm-6 col-md-6">
<div class="form-group">
<input
type="password"
name="password"
class="form-control"
id="p_email"
placeholder="Enter Password"
required=""
/>
<div class="help-block with-errors"></div>
</div>
</div>
<div class="form-group">
<div id="success"></div>
<button type="submit" value="Submit" class="btn btn-primary">
Login
</button>
</div>
<p>Haven't signed up yet?</p>
<a href="{% url 'register' %}">Sign up</a>
</form>
New User Model In NewUser model
class NewUser(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(_('email address'), unique=True)
user_name = models.CharField(max_length=150, unique=True)
first_name = models.CharField(max_length=150, blank=True)
avatar = models.ImageField(null=True,default="avatar.svg")
start_date = models.DateTimeField(default=timezone.now)
address = models.CharField(max_length=150, default="Wuhan")
country = models.CharField(max_length=150,)
year_in_school = models.CharField(
max_length=2,
default=FRESHMAN,
)
about = models.TextField(_(
'about'), max_length=500, blank=True)
is_staff = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
objects = CustomAccountManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['user_name', 'first_name']