我使用Django REST Framework构建一个带有REST API后端的网站,并使用djoser中基于令牌的身份验证。
该网站具有可通过管理页面编辑的用户页面(例如<page-url>/admin
)
除非您是所有者,否则不应该访问它们。当request.user
不可用时,限制访问非API视图的最佳方法是什么?
答案 0 :(得分:0)
有两种简单的方法来限制匿名用户的访问权限:
只需为视图的非request.user访问添加规则:
def admin_view(token):
if not Token.objects.get(token=token):
return redirect('%s' % (settings.LOGIN_URL))
为您的管理员观点添加装饰器:
from django.contrib.auth.decorators import login_required
@login_required(login_url='/accounts/login/')
def admin_view(view):
...
在这种情况下,您必须更新基类中的login_required mixin或编辑默认的auth / permissions中间件,但这取决于您的实际身份验证系统的行为。
答案 1 :(得分:0)
我正在使用装饰器来限制匿名用户的访问。
from django.contrib.auth.decorators import login_required
urlpatterns = patterns(
url(r'^page_url/$', login_required(MyView.as_view())),
)
同样对于翻译我修改了TemplateView。您可以创建一个TemplateView类来限制对静态页面的访问。
class TemplateView(TemplateResponseMixin, ContextMixin, View):
"""
A view that renders a template. This view will also pass into the context
any keyword arguments passed by the url conf.
"""
def get(self, request, **kwargs):
try:
current_user = request.user
if current_user.is_authenticated() and (bool(request.path_info == '/') or bool(request.path_info == '/login/')):
return HttpResponseRedirect('/dashboard')
current_language = current_user.language_code
translation.activate(current_language)
context = self.get_context_data(**kwargs)
return self.render_to_response(context)
except:
context = self.get_context_data(**kwargs)
return self.render_to_response(context)