django和angularJS permission_required anonymousUser

时间:2015-02-15 19:49:39

标签: django angularjs

我正在编写一个django / angularjs应用程序,我正在尝试使用@permission_required进行用户权限授权。

我从客户端返回header-sessionId和csrf令牌,而@permission_required方法用户是anonymousUser,虽然当我登录用户时,我使用 - login(request,user)方法,并将用户arg更新为当前用户:

@api_view(['GET', 'POST', 'DELETE'])
def log_in_view(request):
    body = request.body
    json_body = json.loads(body)
    email = json_body.get("email")
    password = json_body.get('password')
    user = authenticate(email=email, password=password)
    session = request.session

    if user is not None:
        request.session['email'] = email
        request.session['password'] = password
        session.set_expiry(900)
        session.save()
        session_key = session.session_key
        login(request, user)
        crcf = get_token(request)
        response_body = {}
        response_body.update({"session_key" : session_key})
        response_body.update({"csrf" : crcf})
        return HttpResponse(json.dumps(response_body), content_type="text/json", status=200)
    else:
        return HttpResponse("could not authenticate user", content_type="text/plain", status=401)

有没有人知道我做错了什么?

欢呼声

2 个答案:

答案 0 :(得分:0)

你不需要所有这些东西来登录用户。我的意思是你不需要手动设置会话,要么返回csrf令牌。

@api_view(['GET', 'POST', 'DELETE'])
def log_in_view(request):
    body = request.body
    json_body = json.loads(body)
    email = json_body.get("email")
    password = json_body.get('password')
    user = authenticate(email=email, password=password)

    if user:
        login(request, user)
        response_body = {}
        response_body['user'] = user
        return HttpResponse(json.dumps(response_body), content_type="text/json", status=200)
    else:
        return HttpResponse("could not authenticate user", content_type="text/plain", status=401)

答案 1 :(得分:0)

使用@api_view我假设你正在使用Django REST Framework。

django rest框架的每个api视图都不依赖于django身份验证。如果您希望视图使用django身份验证,则应在视图中添加适当的@authentication_classes(...)装饰器,或在settings.py文件中全局指定。