为什么django既有authenticate方法又有login方法?
Why does django have both an authenticate method and a login method?
我正在学习身份验证教程,作者正在使用 authenticate()
方法对登录表单中的凭据数据进行身份验证。结果被分配给一个用户变量,就像这样
user = authenticate(username=username, password=password)
下一步:用户使用 login(request, user)
登录
但为什么有两种不同的方法?身份验证凭据不应该是登录过程的一部分吗?那么为什么 login
函数不也处理该部分呢?或者在某些情况下您确实想使用 authenticate
而不是 login
?
此外,当凭据错误时会发生什么情况? user 会变成 null 还是会抛出异常?
谢谢
authenticate
确认用户的凭据和 returns 用户对象。您现在已经将一组凭据解析为用户对象。这并不自动意味着您也想让该用户成为当前登录的用户。这就是 login
所做的,它更新会话以使该用户成为 "the logged in user"。 通常 您可能想同时做这两件事,但不一定。您可能想要在没有任何凭据的情况下登录特定用户,并且您可能想要验证用户的凭据而不一定要让他们登录。
authenticate(..)
[Django-doc] 将验证凭据。因此,它会查看身份验证后端是否有具有给定凭据的用户,如果是,return 那个 User
对象。否则会returnNone
。但它 不会 登录该用户。因此,您可以将其用于敏感方法,例如,当该用户计划删除其帐户时,询问已登录用户的密码。
另一方面,login(..)
[Django-doc],登录用户。它将创建与该用户的会话,并设置正确的会话变量。请注意,no 凭据对此是必需的。例如,您可以使用它来授予管理员对帐户的访问权限 ("impersonate"),或者在某些人之间共享 "virtual account"。登录用户 本身 不需要先进行身份验证。
虽然这两者如此相关,而且人们经常看到一种模式,即首先对用户进行身份验证,然后再登录,但事实并非如此。
我正在学习身份验证教程,作者正在使用 authenticate()
方法对登录表单中的凭据数据进行身份验证。结果被分配给一个用户变量,就像这样
user = authenticate(username=username, password=password)
下一步:用户使用 login(request, user)
但为什么有两种不同的方法?身份验证凭据不应该是登录过程的一部分吗?那么为什么 login
函数不也处理该部分呢?或者在某些情况下您确实想使用 authenticate
而不是 login
?
此外,当凭据错误时会发生什么情况? user 会变成 null 还是会抛出异常?
谢谢
authenticate
确认用户的凭据和 returns 用户对象。您现在已经将一组凭据解析为用户对象。这并不自动意味着您也想让该用户成为当前登录的用户。这就是 login
所做的,它更新会话以使该用户成为 "the logged in user"。 通常 您可能想同时做这两件事,但不一定。您可能想要在没有任何凭据的情况下登录特定用户,并且您可能想要验证用户的凭据而不一定要让他们登录。
authenticate(..)
[Django-doc] 将验证凭据。因此,它会查看身份验证后端是否有具有给定凭据的用户,如果是,return 那个 User
对象。否则会returnNone
。但它 不会 登录该用户。因此,您可以将其用于敏感方法,例如,当该用户计划删除其帐户时,询问已登录用户的密码。
login(..)
[Django-doc],登录用户。它将创建与该用户的会话,并设置正确的会话变量。请注意,no 凭据对此是必需的。例如,您可以使用它来授予管理员对帐户的访问权限 ("impersonate"),或者在某些人之间共享 "virtual account"。登录用户 本身 不需要先进行身份验证。
虽然这两者如此相关,而且人们经常看到一种模式,即首先对用户进行身份验证,然后再登录,但事实并非如此。