﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
20846	Increase contrib.auth's User.username length	ivoras@…	nobody	"Currently, contrib.auth's User model sets the username field's max_length at 30, the same as for first_name and last_name. This is reasonable but a bit conservative (http://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/). Nowadays it is common to use e-mail addresses as usernames (especially if using external auth sources such as OAuth), but while the email field is reasonably long (75), the 30 characters for the username seems too short for modern sites.

I'd actually like to propose increasing all the naming fields (username, email, first_name, last_name) to 150, but I'll settle for making the username field as long as the e-mail field.

Patches:

{{{
--- models.py   2013-06-28 15:08:30.000000000 +0200
+++ /home/ivoras/temp/Django-1.6b1/django/contrib/auth/models.py        2013-08-01 18:13:01.280591492 +0200
@@ -366,8 +366,8 @@
 
     Username, password and email are required. Other fields are optional.
     """"""
-    username = models.CharField(_('username'), max_length=30, unique=True,
-        help_text=_('Required. 30 characters or fewer. Letters, numbers and '
+    username = models.CharField(_('username'), max_length=75, unique=True,
+        help_text=_('Required. 75 characters or fewer. Letters, numbers and '
                     '@/./+/-/_ characters'),
         validators=[
             validators.RegexValidator(re.compile('^[\w.@+-]+$'), _('Enter a valid username.'), 'invalid')
}}}

and

{{{
--- forms.py    2013-06-28 15:08:30.000000000 +0200
+++ /home/ivoras/temp/Django-1.6b1/django/contrib/auth/forms.py 2013-08-01 18:14:52.760588650 +0200
@@ -73,9 +73,9 @@
         'duplicate_username': _(""A user with that username already exists.""),
         'password_mismatch': _(""The two password fields didn't match.""),
     }
-    username = forms.RegexField(label=_(""Username""), max_length=30,
+    username = forms.RegexField(label=_(""Username""), max_length=75,
         regex=r'^[\w.@+-]+$',
-        help_text=_(""Required. 30 characters or fewer. Letters, digits and ""
+        help_text=_(""Required. 75 characters or fewer. Letters, digits and ""
                       ""@/./+/-/_ only.""),
         error_messages={
             'invalid': _(""This value may contain only letters, numbers and ""
@@ -123,8 +123,8 @@
 
 class UserChangeForm(forms.ModelForm):
     username = forms.RegexField(
-        label=_(""Username""), max_length=30, regex=r""^[\w.@+-]+$"",
-        help_text=_(""Required. 30 characters or fewer. Letters, digits and ""
+        label=_(""Username""), max_length=75, regex=r""^[\w.@+-]+$"",
+        help_text=_(""Required. 75 characters or fewer. Letters, digits and ""
                       ""@/./+/-/_ only.""),
         error_messages={
             'invalid': _(""This value may contain only letters, numbers and ""
}}}"	New feature	closed	contrib.auth	dev	Normal	fixed		cmawebsite@…	Accepted	1	0	0	0	0	0
