작성
·
1.4K
1
401 에러가 나서 제가 구글링을 나름 해보니, 토큰인증의 문제가 원인이라고 하는데 아직 토큰발급을 적용하지 않았는데 이런 에러가 나는 이유는 무엇일까요..
Signup.js 부분은 선생님의 코드와 완전히 같습니다.
import React, { useState } from "react";
import Axios from "axios";
export default function Signup() {
const [inputs, setInputs] = useState({});
const onSubmit = e => {
e.preventDefault();
Axios.post("http://localhost:8000/accounts/signup/", inputs)
.then(response => {
console.log("response: ",response);
})
.catch(error => {
console.log("error: ",error);
});
};
const onChange = e => {
const {name, value} = e.target;
setInputs(prev => ({
...prev,
[name]: value
}));
};
return (
<div>
<form onSubmit={onSubmit}>
<input type="text" name="username"onChange={onChange}/>
<input type="password" name="password" onChange={onChange}/>
<input type="submit" value="회원가입" />
</form>
</div>
);
}
백엔드 단에서는 구조가 약간 다르긴 하지만 accounts 부분은 크게 다르지 않습니다.
accounts/models.py
from django.db import models
class User(models.Model):
user_id = models.CharField(max_length=32, unique=True, verbose_name='id')
user_pw = models.CharField(max_length=128, verbose_name='password')
user_name = models.CharField(max_length=16, unique=True, verbose_name='name')
user_Email = models.EmailField(max_length=128, unique=True, verbose_name='email')
def __str__(self):
return self.user_name #오브젝트 호출시 user_name으로 표시
class Meta: #DB 테이블 명 지정
db_table = 'user'
verbose_name = 'user'
accounts/serializers.py
from rest_framework import serializers
from django.contrib.auth import get_user_model
User = get_user_model()
class SignupSerializer(serializers.ModelSerializer):
#pw 보안
password = serializers.CharField(write_only=True)
def create(self, validated_data):
user = User.objects.create(username=validated_data["username"])
user.set_password(validated_data["password"]) #암호화된 비번 저장
user.save()
return user
class Meta:
model = User
fields = ["pk", "username", "password"]
from django.urls import path
from . import views
urlpatterns = [
path('signup/', views.SignupView.as_view(), name='login'),
]
from django.contrib.auth import get_user_model
from django.shortcuts import render
from rest_framework.permissions import AllowAny
from rest_framework.generics import CreateAPIView
from .serializers import SignupSerializer
#회원가입 뷰
#createapiview 이므로 get 메소드 허용X
class SignupView(CreateAPIView):
model = get_user_model()
serializer_class = SignupSerializer
Permission_classes = [
AllowAny,#실제로 회원가입할 때는 로그인은 되면 안됨
]
혹시 뭐가 원인일지 추측이라도 해주시면 감사하겠습니다..혹시 버전문제일 수도 있을까요? 현재 장고는 3.2 리액트는 18이긴합니다
답변 1
1
안녕하세요.
거의 모든 CBV의 속성명은 소문자입니다.
아래처럼 Permission_classes로 쓰셔서, AllowAny가 반영이 안 된듯 보입니다.
확인해보시고 댓글 부탁드립니다.
화이팅입니다. :-)
와...이걸 못찾아서 몇시간을....ㅠㅠㅠ
정말 감사합니다!!