我是django休息框架(以及一般的REST)的初学者,我有一个服务器端(现在)有一个UserViewSet,允许注册新用户,我可以从我的Android应用程序POST到url很好(我得到201创建)。
我读了很多关于它的内容,但我似乎并不完全理解REST框架中的登录和身份验证的概念,特别是在django rest框架中,以及它是如何工作的。
你“登录”(例如在facebook中)然后你可以提出请求吗?
我理解\听说过:
您可以使用您的用户名和密码登录API \网站(假设您已经注册为用户而且您在用户数据库中)。
登录后 - 您将能够向仅允许登录\ authenticated用户访问的视图发出请求。
这有点正确吗?我的意思是,你登录的是否有“登录”网址,就是这样?你是经过身份验证的吗?
还可以在某处看到不是实际上是登录网址,并且您必须为每个请求添加用户名和密码,然后请求必须检查您的详细信息是否在用户数据库?
总结一下,我不确定在django REST框架中如何进行身份验证/登录(同样的事情?)并且非常感谢一个很好的解释或示例..
非常感谢!
答案 0 :(得分:2)
在普通的Web应用程序中(从问题中删除API),用户将使用他们的凭据(用户名/密码,社交令牌等)“登录”并将收到会话cookie(由Django分配)允许他们代表用户(实际上,他们自己)在将来的请求中进行身份验证。此会话cookie在其系统上保留一段有限的时间(默认为两周),并允许他们自由使用该网站而无需再次进行身份验证。如果需要删除会话cookie,以使该人无法再进行身份验证,则Web应用程序通常会破坏会话cookie(或清除会话),这会有效“将其记录下来”。
对于API,一切都取决于身份验证的工作方式。
SessionAuthentication
的工作方式如上所述,因为它使用Django的内部会话系统。TokenAuthentication
通过数据库支持的令牌(在Authorization
标头中传输)而非会话cookie记住身份验证信息。BasicAuthentication
通过在每个请求上传递用户名和密码(通过Authorization
标头编码的base64)对每个会话(无持久会话)进行身份验证。TokenAuthentication
的工作方式相同。因此,以下是对提出的具体问题的一些答案
您是否“登录”(例如在Facebook中)然后您可以提出请求?
使用BasicAuthentication
,您可以通过提供凭据“登录”每个请求。使用基于令牌的身份验证(TokenAuthentication
,OAuth 2,JWT等),您“登录”以接收初始令牌,然后在每次请求时确认您的授权。
另外在某处读取实际上没有登录网址,并且您必须为每个请求添加用户名和密码,然后请求必须检查您的详细信息是否在用户数据库中?
这是basic access authentication您可以使用BasicAuthentication
类在DRF中使用。