Estou aprendendo React e decidi criar um login form utilizando django-rest-framework(backend) e react(frontend). No React eu criei o formulário que envia uma axios.post para minha view function com as informações. Porém quando eu não coloco @api_view([‘POST’]) na view o django retorna: Forbidden (CSRF cookie not set.)
Meu django está http://127.0.0.1:8000/ e meu React em http://192.168.56.1:3000
Quando meu login renderiza:
useEffect(()=>{
axios({method:'get', url:'http://127.0.0.1:8000/usuario/gera})
.then(response=>{
setToken(response.data)
})
.catch(error=>{})
},[])
Quando o formulário é enviado:
function logar(e){
document.cookie = `X-CSRFToken=${token}`
login(email, senha1)
e.preventDefault()
}
Meu axios (dentro da função login):
let token = getCookie('X-CSRFToken');
axios({
method:'post',
url: url,
data:{email:email, password1:senha},
headers: {'X-CSRFTOKEN': token},
withCredentials: true
})
.then((response)=>{
console.log(`Reposta: ${response.data}`)
})
.catch((error)=>{
console.log(`Erro: ${error.data}`)
});
Minha django view:
def login_usuario(request):
if request.method == 'POST':
return HttpResponse('Something')
No django settings:
CSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN'
CSRF_COOKIE_NAME = 'X-CSRFTOKEN'
CORS_ALLOW_HEADERS = [
'X-CSRFTOKEN',
'csrftoken',
'X-XSRF-TOKEN',
'content-type',
'x-requested-with',
'Authorization',
'Set-Cookie'
]
CORS_ALLOW_CREDENTIALS = True
CSRF_TRUSTED_ORIGINS = ['http://localhost:3000']
CSRF_COOKIE_DOMAIN = 'http://192.168.56.1:3000'
CSRF_COOKIE_PATH = 'http://localhost:3000'
SESSION_COOKIE_DOMAIN = 'http://localhost:3000'