验证和登录之间的区别是什么?

时间:2015-01-31 07:20:58

标签: python django django-authentication django-1.7

文档:https://docs.djangoproject.com/en/1.7/topics/auth/default/#django.contrib.auth.login

  

当您手动登录用户时,必须在调用login()之前调用authenticate()。 authenticate()在用户上设置一个属性,注意哪个身份验证后端成功验证了该用户(有关详细信息,请参阅后端文档),稍后在登录过程中需要此信息。如果您尝试直接登录从数据库检索的用户对象,则会引发错误。

那么为什么authenticatelogin两个函数完全相同?据我所知,authenticate只是验证登录信息。 login将获取用户对象并设置Cookie。我认为它们是分开的唯一原因是因为也许你可以放入不同的用户对象,比如用户有2个帐户合并。也许您想先验证电子邮件地址。这就是为什么它们是单独的函数而login不包装authenticate

2 个答案:

答案 0 :(得分:8)

简单来说,

身份验证是指验证用户凭据 而登录是指在验证(验证)用户凭证后创建用户会话

答案 1 :(得分:7)

这是单一责任原则的问题:方法应该做一个合乎逻辑的事情。正如您自己所说,这两个步骤在逻辑上截然不同:

  

authenticate只验证登录信息。   login将获取用户对象并设置Cookie

为进一步澄清,身份验证是一次性检查, 并不意味着登录会话。 登录会话意味着用户可以在不重复身份验证检查的情况下自由执行各种受限活动的一段时间。

有时您可能需要对用户进行身份验证(验证他们是否是他们所说的人),而无需登录。 如果将这两个功能组合成一个, 你不能那样做, 即使你只是想做一次性检查, 你必须登录,创建一个会话, 这没有意义。 由于这些目的明显不同, 有两种方法是完全合理的。

分离也使测试更容易。如果你编写一个新的身份验证后端,你可能希望能够测试单独的身份验证步骤是否有效,而不必担心整个登录系统是如何工作的,这不是你后端的责任。

将方法分解为最小的逻辑独立元素是明智之举,有很多好处。