Странный запрос POST, отправляющий csrf_token как пароль - PullRequest
0 голосов
/ 31 января 2019

У меня есть вид для моего Django API, который регистрирует пользователей.Из моего клиентского кода ReactJS я передал токен CSRF, но когда я его вызываю, я получаю:

[30/Jan/2019 23:45:04] "OPTIONS /newuser/ HTTP/1.1" 200 108

Вместо успешного вызова POST.Вот код Django:

path('newuser/', views.SignUp.as_view()),

API View:

class SignUp(APIView):

parser_classes = (JSONParser,)
permission_classes = (AllowAny,)

def post(self, request, format = None):

    username = request.data['username']
    password = request.data['password']

    user = User.objects.create_user(username = username, password = password)

    login(request, user)
    returnData = UserSerializer(user)
    return Response(returnData.data)

Вот клиентская часть.

loginSubmit() {

    var csrftoken = document.getElementById('token').getAttribute('value');
    console.log(csrftoken);
    fetch('http://localhost:8000/newuser/', {
      method: 'POST',
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        username: this.state.username,
        password: this.state.password,
      }),
    })

  }

Это мой код формы React POSTНа всякий случай:

const LoginScreen = (props) => {

  return (
    <div>
      <form onSubmit={props.loginSubmit}>
        <CSRFToken />
        <label className="loginLabel">
          <h3>Username</h3>
          <input name="username" style={{position: 'relative', height: '50%', top: '50%'}} type="text" value={props.value} onChange={props.handleChangeUserName} />
        </label>
        <label className="loginLabel">
          <h3>Password</h3>
          <input name="password" type="text" value={props.value} onChange={props.handleChangePassword} />
        </label>
        <button type="submit" id="loginButton" className="loginButton"><Link to="/app">Login</Link></button>
      </form>
    </div>
  );

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...