正如我的标题所说,我想知道如果我有一种方法可以让用户不仅可以使用他的用户名,还可以使用他的用户电子邮件登录。我想标准化登录过程,因为此刻我让用户使用许多不同的约定,而且非常混乱。Django:更改/允许用户的登录用户名也可以使用他/她的电子邮件
2
A
回答
2
如果您强制使用唯一的电子邮件地址,则可以这么做。意思是没有用户可以拥有相同的电子邮件地址。这样,您就可以通过e-mail地址,获取用户和记录他们
的形式可能是这个样子:
<form method="post" action="{% url myproject.views.login %}">
<p>Username</p>
<input type='text' name='username'/>
<p>Password</p>
<input type='password' name='password'/>
<input type="submit" value="Login"/>
</form>
视图方法可能是这个样子:
def login(request):
username = request.POST['username']
password = request.POST['password']
user = User.objects.filter(email = username)[0]
if(user is not None):
# -- the user was retrieved by an email address
# -- now you can authenticate and log them in log them in
from django.contrib import auth
user = auth.authenticate(user.username, password)
if(user is not None):
auth.login(user, request)
OpenID的可能是另一种方式去:http://bit.ly/a2OlHX
每个用户确保独特的e-mail地址:http://bit.ly/aOaAbw
0
我想现在我'解决了'我的问题,至少它是功能性的。 我决定使用我自己的身份验证后端。我创建了一个文件'auth_backends.py',并将其添加到我settings.py中的AUTHENTICATION_BACKENDS中:
我的登录表单域只包含'用户名'和密码。我正在做的检查输入的用户名是否实际上是他的用户名或电子邮件的唯一方法是通过执行.find('@')。 有没有更好的方法来检查它?这足够吗? 我这样做的全部原因是因为用户比他的用户名(它实际上是一个由数字组成的'id')更容易记住他/她的电子邮件。我也将不得不照顾重复的电子邮件。
from django.conf import settings
from django.contrib.auth.backends import ModelBackend
from django.core.exceptions import ImproperlyConfigured
from django.db.models import get_model
from django.contrib.auth.models import User
class CustomUserModelBackend(ModelBackend):
def authenticate(self, **credentials):
if 'username' in credentials:
if credentials['username'].find('@') > 0:
return self.authenticate_by_email(**credentials)
else:
return self.authenticate_by_username(**credentials)
def authenticate_by_username(self, username=None, password=None):
try:
user = User.objects.get(username=username)
if user.check_password(password):
return user
except User.DoesNotExist:
return None
def authenticate_by_email(self, username=None, password=None):
try:
user = User.objects.get(email=username)
if user.check_password(password):
return user
except User.DoesNotExist:
return None
相关问题
- 1. CakePHP:允许使用用户名或电子邮件登录
- 2. 允许使用用户名或电子邮件地址登录
- 3. 允许用户使用电子邮件或用户名(AspNet.Identity)登录
- 4. 更改用户从电子邮件登录到用户名
- 5. 允许用户同时使用userename或电子邮件登录
- 6. 更改用户名登录到电子邮件登录
- 7. 如何允许电子邮件以及用户名登录账户?
- 8. 如何更改Django登录以允许电子邮件?
- 9. 允许电子邮件和用户名在django项目中登录
- 10. Django Rest JWT登录使用用户名或电子邮件?
- 11. 允许在Laravel 5.4中使用用户名或电子邮件登录
- 12. 是否可以更改Yodlee用户的电子邮件和登录名
- 13. 如何让用户使用他们的电子邮件或用户名登录?
- 14. Django管理员:允许电子邮件作为用户名?
- 15. 接受用户名或电子邮件与登录的Django allauth
- 16. 使用用户名或电子邮件使用codeigniter登录
- 17. 的Android解析登录使用电子邮件或用户名
- 18. 不允许用户使用设备更改电子邮件地址使用Rails
- 19. django注册 - 允许多个用户的电子邮件ID
- 20. 如何使WebSecurity.Login使用用户名或电子邮件登录?
- 21. 允许用户更改他们的用户名
- 22. 防止用户更改他们的电子邮件别名
- 23. 煤层。使用电子邮件或用户名登录
- 24. 使用用户名或电子邮件设计登录
- 25. Laravel使用电子邮件而不是用户名登录
- 26. 使用SQLAlchemyAuthenticatorPlugin登录电子邮件或用户名
- 27. wordpress使用用户名或电子邮件登录页面
- 28. 如何使用“用户名或电子邮件”登录设计?
- 29. 配置authlogic使用“用户名”或“电子邮件”登录
- 30. Zend_Auth - 能够使用电子邮件和用户名登录
这可能有效。我还发现了编写我自己的身份验证后端并将其包含为中间件。 – chiurox 2010-11-24 19:29:27