2009-04-01 35 views
14

thể trùng lặp:
Accepting email address as username in DjangoCách sử dụng email thay vì tên người dùng để xác thực người dùng?

Mô hình xác thực được cung cấp cùng với Django được dựa trên tên người dùng.

Việc cần làm để thay đổi xác thực dựa trên email thay vì tên người dùng?

Để cụ thể hơn:

Với xác thực username, để đăng nhập người dùng chúng ta thực hiện như sau:

user = authenticate(name,password) 
....... 
login(request,user) 

gì để viết về những điều khoản trên nếu chúng ta đang chứng thực sử dụng email?

Đối với hình thức:

Tôi đang lên kế hoạch để viết hình thức riêng của tôi trong đó cho thấy các lĩnh vực email, mật khẩu và xác nhận. Đây có phải là cách tiếp cận chính xác không?

Trả lời

1

Có vẻ như bạn chỉ có thể che giấu tên người dùng bằng từ "email" và tất cả tên người dùng sẽ chỉ hiển thị email thay thế.

+0

Tôi nghĩ chúng tôi không thể sử dụng trường tên người dùng cho email vì chúng tôi không thể lưu trữ biểu tượng @ trong tên người dùng. –

+0

Hmm .... tốt, tôi không biết tại sao không nhưng nếu đó là trường hợp thì đề xuất của tôi không hữu ích lắm. – jerebear

+0

Trong Django 1.2, bạn @ được phép trên tên người dùng, vì vậy giải pháp này có thể hoạt động (và nó khá đơn giản). – juanjux

5

Khám phá this snippet và đọc nhận xét để cập nhật.

Đối với biểu mẫu, tại sao không chỉ kế thừa từ (hoặc trực tiếp sử dụng) biểu mẫu đăng nhập xác thực. Xem django/contrib/auth/forms.py

+0

Đồng thời xem dự án django-emailauth: http://github.com/redvasily/django-emailauth/tree/master/ hy vọng một ngày nào đó sẽ hỗ trợ đăng nhập kiểu EAUT. –

-1

Trừ khi tôi đã bỏ lỡ một cái gì đó, các giải pháp cần được thực sự đơn giản; chỉ cần tạo một biểu mẫu bình thường với trường văn bản và trường mật khẩu. Khi phương thức yêu cầu HTTP là POST, hãy thử tìm nạp người dùng bằng địa chỉ email đã cho. Nếu người dùng đó không tồn tại, bạn có lỗi. Nếu người dùng không tồn tại, hãy thử xác thực người dùng và đăng nhập cô ấy.

+0

Đây không phải là sử dụng Django ORM – elit3x

7

Tôi đã tìm thấy this snippet khi đọc câu hỏi trùng lặp cho câu hỏi này. Ngoài ra kiểm tra this code:

class UserForm(forms.ModelForm): 
    class Meta: 
     model= User 
     exclude= ('email',) 
    username = forms.EmailField(max_length=64, 
     help_text = "The person's email address.") 
    def clean_email(self): 
     email= self.cleaned_data['username'] 
     return email 

class UserAdmin(admin.ModelAdmin): 
    form= UserForm 
    list_display = ('email', 'first_name', 'last_name', 'is_staff') 
    list_filter = ('is_staff',) 
    search_fields = ('email',) 

admin.site.unregister(User) 
admin.site.register(User, UserAdmin) 

Không trả lời là ban đầu tôi. Bỏ phiếu trên các chủ đề khác để các chủ sở hữu cho sự thúc đẩy nghiệp. Tôi chỉ sao chép chúng ở đây để làm cho chuỗi này hoàn chỉnh nhất có thể.

Các vấn đề liên quan