2016-11-22 15 views
1

Django默认用户验证是通过UsernamePassword集成的。在我的项目档案页面中,我可以选择更改Username。因此,有必要在后端和前端使用emailpassword更改我的身份验证系统。Django 1.10 - 如何将用户名前端用户认证更改为电子邮件?

使用authentication backend我可以通过管理中的emailpassword更改默认身份验证系统。下面是代码 -

class EmailBackend(object): 
    def authenticate(self, username=None, password=None, **kwargs): 
     UserModel = get_user_model() 
     try: 
      user = UserModel.objects.get(email=username) 
     except UserModel.DoesNotExist: 
      return None 
     else: 
      if getattr(user, 'is_active', False) and user.check_password(password): 
       return user 
     return None 

    def get_user(self, user_id): 
     try: 
      return User.objects.get(pk=user_id) 
     except User.DoesNotExist: 
      return None 

settings.py -

AUTHENTICATION_BACKENDS = (
    'apps.account.email-auth.EmailBackend', 
) 

我不知道我怎么会在前端做认证通过。我已经通过emailpassword准备了前登录页面。

但见form.errors和预测必须失去了任何正面认证喜欢AUTHENTICATION_BACKENDS

非常感谢您的帮助!

+0

这里的前端auth是什么意思?无论你创建的是适用于管理员还是客户端。 – itzMEonTV

+0

能否请你说清楚 –

+0

请注意,在django auth的'User'中,字段'username'是唯一的,而'email'不是。您可能必须在'authenticate'中捕获'MultipleObjectsReturned'。 – schwobaseggl

回答

0

有一个包django-allauth。它处理认证。 它允许使用“电子邮件”和“密码”或“用户名”和“密码”进行身份验证。它包括表格和其他一切需要的东西。 Django-cookiecutter项目模板使用这个包来处理认证,所以你可以看看那里并用它作为示例。

1

其实答案是在方法中 -

def authenticate(self, username=None, password=None, **kwargs): 

在前端,与email不会在方法中传递,然后形成错误显示了不匹配的证书命名的用户输入。所以,简单地输入为username解决了这个诀窍。

相关问题