cURL 및 Postman으로 Django 휴식 API를 테스트하는 데 문제가 있습니다. 내 클래스 뷰에 대한 액세스를 제한 할 LoginRequiredMixin을 사용하고 있습니다 :CURL과 Postman이 LoginRequiredMixin을 사용하여 Django 휴식 API에 액세스 할 수 없습니다.
class UserList(LoginRequiredMixin, generics.ListCreateAPIView):
model = User
queryset = User.objects.all()
serializer_class = UserSerializer
를 권한이없는 사용자가 자신이 로그인 페이지로 리디렉션됩니다 페이지에 액세스하려고 할 때. URL에서 사용자가 권한 부여 직후에 원하는 페이지를 볼 수 있도록 다음 매개 변수가 있습니다.
/accounts/login/?next=/users/
문제 컬 및 우편 배달부가 아마 인증을 위해 사용자 이름과 암호를 제공 사용하지 않고 바로 결과로 반환되는 로그인 페이지로 리디렉션되는 것입니다.
다음은 예제 또는 cURL 명령입니다. 사용자 이름과 암호가 제공 되더라도 결과는 302입니다. 다음 리디렉션에 -L 매개 변수를 추가하면 로그인 페이지의 응답이 반환되고 원래 페이지로 리디렉션되지 않습니다.
curl -i -L -u superadmin:superadmin http://127.0.0.1:8000/users/
HTTP/1.0 302 Found
Date: Fri, 13 Oct 2017 10:16:31 GMT
Server: WSGIServer/0.2 CPython/3.5.2
Vary: Cookie
Content-Length: 0
Content-Type: text/html; charset=utf-8
Location: /accounts/login/?next=/users/
X-Frame-Options: SAMEORIGIN
HTTP/1.0 200 OK
Date: Fri, 13 Oct 2017 10:16:31 GMT
Server: WSGIServer/0.2 CPython/3.5.2
Vary: Cookie
Content-Length: 1128
Content-Type: text/html; charset=utf-8
Cache-Control: max-age=0, no-cache, must-revalidate, no-store
X-Frame-Options: SAMEORIGIN
Expires: Fri, 13 Oct 2017 10:16:31 GMT
Set-Cookie: csrftoken=cCfAfsSlHOZEQGvPD1RR33r1UXj6JtEscWKFjmVyHmvVasqMx2J0pqyeNbVpY3X9; expires=Fri, 12-Oct-2018 10:16:31 GMT; Max-Age=31449600; Path=/
<html>
<head>
<title>Login</title>
</head>
<body>
<h1>Login</h1>
<form method="post" action="">
<table>
<tr>
<td><label for="id_username">Username:</label></td>
<td><input type="text" name="username" id="id_username" autofocus maxlength="254" required /></td>
</tr>
<tr>
<td><label for="id_password">Password:</label></td>
<td><input type="password" name="password" id="id_password" required /></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="Login" />
<input type="hidden" name="next" value="/private/meals/" />
<input type='hidden' name='csrfmiddlewaretoken' value='Pd3g7jmZ0WAACWihmRxNGvLF2wy5yzP9Pxylbdpc0u6RWIdegSpW2SSSVKaoN98Q' />
</td>
</tr>
</table>
</form>
<p><a href="/accounts/signup/">Sign up</a></p>
</body>
</html>
here 제안대로 쿠키 저장 및로드를 시도했지만 작동하지 않습니다. cURL과 Postman에서 LoginRequiredMixin을 전달할 방법이 있습니까? 또는 Django Rest Framework에서 Rest API 테스터와 함께 사용할 수있는 적절한 액세스 제한 방법은 무엇입니까?
는 당신에게 감사
불행히도 도움이되지 않습니다. 다른 브라우저에서는 다른 코드를 사용하지 않고 사용자가 어디에서 왔는지 확인하지 않습니다. --header 옵션을 사용하는 방법이나 도움이되는 방법을 잘 모르겠습니다. 나는 cURL과 Postman이 제공된 인증을 사용하지 않고 Django의 LoginRequiredMixin에 의해 즉시 리디렉션된다고 생각하기 시작합니다. 나는 장고에서 다른 좋은 액세스 제한이 있는지 잘 모르겠다. –
저장 쿠키가 작동하지 않는다고하셨습니까? as : curl -X POST -d "username = superadmin & password = superadmin"-c login http : // localhost : 8000/accounts/login; curl -b login http : // localhost : 8000/users/ – efkin
와우. 작은 수정으로 실제로 작동합니다. 로그인 페이지로 데이터를 로깅 한 후 "403 Forbidden - CSRF 확인에 실패했습니다. 요청이 중단되었습니다." 메시지. 내가 로그인 페이지에서 csrf 토큰을 올바르게 설정했기 때문에 이상하게 보입니다.그럼에도 불구하고 나는 csrf를 curl 명령에 매개 변수로 설정하려고 시도했다. [here] (https://stackoverflow.com/questions/10628275/how-to-use-curl-with-django-csrf-tokens-and-post-requests) 그리고 효과가있었습니다.
우편 배달부와 함께하는 방법을 알고 계십니까? 또한 답으로 게시 할 수도 있습니다. 나는 그것을 할 것이나, 당신의 신용을 가지고 가고 싶지 않다. –