Tôi muốn django xác thực người dùng qua email, không phải qua tên người dùng. Một cách có thể là cung cấp giá trị email dưới dạng giá trị tên người dùng, nhưng tôi không muốn điều đó. Lý do là, tôi có một url /profile/<username>/
, do đó tôi không thể có một url /profile/abcd@gmail.com/
.
Một lý do khác là tất cả các email là duy nhất, nhưng đôi khi vẫn xảy ra trường hợp tên người dùng đã được sử dụng. Do đó tôi đang tự động tạo tên người dùng là fullName_ID
.
Làm cách nào tôi có thể thay đổi để Django xác thực bằng email?
Đây là cách tôi tạo một người dùng.
username = `abcd28`
user_email = `abcd@gmail.com`
user = User.objects.create_user(username, user_email, user_pass)
Đây là cách tôi đăng nhập.
email = request.POST['email']
password = request.POST['password']
username = User.objects.get(email=email.lower()).username
user = authenticate(username=username, password=password)
login(request, user)
Có cách đăng nhập nào khác ngoài việc lấy tên người dùng trước không?