这个问题不是关于何时一般使用GET或POST; 它是关于处理Web应用程序注销的推荐方法.我已经在一般意义上找到了关于GET和POST之间差异的大量信息,但我没有找到这个特定场景的明确答案.
作为一个实用主义者,我倾向于使用GET,因为实现它比POST更简单; 只需删除一个简单的链接就可以了.这似乎是我能想到的绝大多数网站的情况,至少从头脑中可以看出来.甚至Stack Overflow也可以使用GET进行注销.
让我犹豫不决的是(尽管很老)一些论点,即一些网络加速器/代理通过访问和检索他们在页面中找到的每个链接来预先缓存页面,因此用户在点击它们时会得到更快的响应.我不确定这是否仍然适用,但如果是这种情况,那么从理论上讲,一旦有用这种加速器的用户在登录后就会被赶出应用程序,因为她的加速器会找到并检索注销链接,即使她从未点击过它.
到目前为止我所阅读的所有内容都建议POST应该用于"破坏性操作",而不改变应用程序内部状态的操作(如查询等)应该用GET处理.基于此,这里真正的问题是:
从应用程序注销被视为破坏性操作/是否会改变应用程序的内部状态?
我正在使用Django和django-rest-framework构建RESTful API .
作为认证机制,我们选择了"令牌认证",并且我已经在Django-REST-Framework的文档之后实现了它,问题是,应用程序是否应该定期更新/更改令牌,如果是,如何?应该是需要续订令牌的移动应用程序还是Web应用程序应该自动执行此操作?
什么是最佳做法?
这里的任何人都有使用Django REST Framework的经验,可以提出技术解决方案吗?
(最后一个问题的优先级较低)
我知道有关于Django Rest Framework的答案,但我无法找到解决问题的方法.
我有一个具有身份验证和一些功能的应用程序.我添加了一个新的应用程序,它使用Django Rest Framework.我想只在这个应用程序中使用该库.我也想发出POST请求,我总是收到这个回复:
{
"detail": "CSRF Failed: CSRF token missing or incorrect."
}
Run Code Online (Sandbox Code Playgroud)
我有以下代码:
# urls.py
from django.conf.urls import patterns, url
urlpatterns = patterns(
'api.views',
url(r'^object/$', views.Object.as_view()),
)
# views.py
from rest_framework.views import APIView
from rest_framework.response import Response
from django.views.decorators.csrf import csrf_exempt
class Object(APIView):
@csrf_exempt
def post(self, request, format=None):
return Response({'received data': request.data})
Run Code Online (Sandbox Code Playgroud)
我想添加API而不影响当前的应用程序.所以我的问题是如何才能为此应用禁用CSRF?
在我的应用程序中,我使用jsapi实现了Google注销.
我使用网址https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=xxxxxx连接到Google,然后通过https://www.googleapis.com/plus/v1/people/xxxxxx获取用户数据来自谷歌个人资料.
现在,我需要在点击应用程序中的按钮时从Google注销用户.如何在JavaScript中实现此功能,或者至少每次用户登录时都必须询问Google登录页面.
我试过了approval_prompt=force,但似乎没有工作.
django ×2
rest ×2
api ×1
architecture ×1
csrf ×1
django-csrf ×1
get ×1
javascript ×1
oauth-2.0 ×1
post ×1