Python 如何以编程方式注销用户?[Django]
我知道在Django中注销用户。如果我想注销用户,我会这样做Python 如何以编程方式注销用户?[Django],python,django,python-3.x,oauth,django-rest-framework,Python,Django,Python 3.x,Oauth,Django Rest Framework,我知道在Django中注销用户。如果我想注销用户,我会这样做 from django.contrib.auth import logout def logout_view(request): logout(request) 但是,如果我使用django oauth toolkit(DOT),那么注销用户的相关方式是什么 我应该遵循相同的规则还是删除令牌?有些人说删除代币,有些人说应该过期。请为我提供使用DOT登录DRF的最佳分辨率。您可以查看 在第1部分之后,您已经向用户授予了一个访
from django.contrib.auth import logout
def logout_view(request):
logout(request)
但是,如果我使用django oauth toolkit(DOT),那么注销用户的相关方式是什么
我应该遵循相同的规则还是删除令牌?有些人说删除代币,有些人说应该过期。请为我提供使用DOT登录DRF的最佳分辨率。您可以查看
在第1部分之后,您已经向用户授予了一个访问令牌,现在您希望撤销该令牌,这可能是为了响应客户端请求(注销)
及
编辑
如果您遵循教程第2部分的内容,您会发现您已经有了撤销令牌url,所以您只需要向该url发送请求
编辑2
让我来解释清楚
当您使用Django OAuth工具包和DRF时,通常会使用
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'oauth2_provider.ext.rest_framework.OAuth2Authentication',
)
}
您可以通过以下方式获得访问令牌:
curl -X POST -d "grant_type=password&username=<user_name>&password=<password>" -u"<client_id>:<client_secret>" http://localhost:8000/o/token/
您可以在这里看到源代码和文档
刷新()
从会话中删除当前会话数据并删除会话cookie。如果要确保无法从用户的浏览器再次访问上一个会话数据(例如,django.contrib.auth.logout()函数调用它),则使用此选项
但请记住,从
access_令牌的生存期与授予客户端访问权限的用户的登录会话无关。OAuth2没有用户登录、注销或会话的概念,因此您期望注销撤销令牌的事实似乎表明您误解了OAuth2的工作原理。您可能应该在问题中澄清为什么希望事情以这种方式工作,以及为什么需要OAuth
最后,在您的情况下,我认为您需要在注销前撤销令牌:
def revoke-token(request):
# just make a request here
# POST /o/revoke_token/ HTTP/1.1 Content-Type: application/x-www-form-urlencoded token=XXXX&client_id=XXXX&client_secret=XXXX
def logout(request):
response = revoke-toke(request)
# if succeed
logout(request)
所以我应该从前端(通过ajax中的头)发送令牌、客户机id和客户机机密(如果机密的话),并调用上面提到的注销(请求)函数?是的,您可以按照教程进行操作。这都是关于curl no views部分的。我很难在视图中对其进行编程。我对我的观点到底应该是什么一无所知?然后我将首先学习curl部分的教程。你只需要将参数发布到你的api中,不管你是否使用DRF,如果只是为了注销。那么我的注销视图应该在哪里?您能创建一个框架,并从前端传递哪个url吗?没有逻辑只是框架(比如如果我想使用普通身份验证注销,我会有一个url和视图作为)url(r'^/user/logout/',UserLogout.as_view(),name=“user_logout”)和类UserLogout。在前端,我将传递action={%url'用户\注销“%}。如果使用ajax,我会使用url:“/user/logout/”。你能不能像我创建的那样创建一个结构?我会将其标记为已回答,这样就更容易通过编程掌握流程。
{
"access_token": "<your_access_token>",
"token_type": "Bearer",
"expires_in": 36000,
"refresh_token": "<your_refresh_token>",
"scope": "read write groups"
}
curl -H "Authorization: Bearer <your_access_token>" http://localhost:8000/users/1/
from django.contrib.auth import logout
def logout_view(request):
logout(request)
def revoke-token(request):
# just make a request here
# POST /o/revoke_token/ HTTP/1.1 Content-Type: application/x-www-form-urlencoded token=XXXX&client_id=XXXX&client_secret=XXXX
def logout(request):
response = revoke-toke(request)
# if succeed
logout(request)