본문 바로가기

영어쌤의 놀이방_ 수퍼.코드.파티/리액트와 장고로 회원가입 관리 만들어욤

(7.4) Frontend Authentication_ 영어쌤이 만드는 회원가입, 인증[CRUD] 만들어욤! 리액트와 파이썬 장고

반응형

(7.4) Frontend Authentication_
영어쌤이 만드는 회원가입, 인증[CRUD] 만들어욤! 리액트와 파이썬 장고

안녕하세요? 죠니입니다.

이제 진짜 마지막의 마지막에 다가왔군요.

인증받은 계정으로 로그인 시에만 새로운 데이터를 생성하고 관리하는 것이 가능해 지도록 하는 작업을 할 차례입니다.

- 시간 끌지 말고 바로 해볼까요?


(25) /src/actions/leads.js

- lead action을 조금 수정합니다.

- action의 auth.js 파일에서 token config function이 있습니다. 그것을 leads로 가져옵니다.

- token 을 얻기 위해 다음과 같이 dispatch와 함께 getState를 줍니다.

- 결과 확인

- 새로고침을 해 보면

- 프로젝트 내내 발생하던 401 에러가 드디어 사라졌습니다.

- 401이 발생했던 이유는 그 동안 프로젝트를 진행하며 인증을 받은 계정으로 로그인을 하더라도 계속해서 lead와 관련해 토큰 발급상의 문제였던 것으로 기억합니다.

-이제 새로운 lead를 등록해 볼까요?

- data를 입력하고, Submit 버튼을 클릭합니다.

- 다음과 같이 data가 업로드 되었음을 표시합니다.

- Redux Tool 에서도 확인할 수 있습니다. 정상작동합니다.

- 그리고 lead list 에서도 저장이 되었음을 확인할 수 있습니다.

- 삭제를 했을 시에 볼 수 있는 메세지 입니다.


(26) 다른 계정으로 인증 받아 접속해 서로 다른 계정간에 data가 보이지 않게 되는지 확인하기.(이번 프로젝트에선 안보여야 정상)

- 다른 계정으로 로그인 합니다.

- Brad1 에서 등록한 data 정보가 보이지 않습니다.

- 새로운 data를 추가합니다.[계정: john]

- 다른 계정으로 접속합니다.[계정: brad1]

- john 이 가지고 있던 list를 볼 수 없고 brad1이 소유한 data만 볼 수 있습니다.


이번에 나온 최종 코드는 다음과 같습니다.

 

/src/actions/leads.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
// /src/actions/leads.js
import axios from 'axios';
import { createMessage, returnErrors } from './messages';
import { tokenConfig } from './auth'
 
import { GET_LEADS, DELETE_LEAD, ADD_LEAD } from './types';
 
// GET LEADS
export const getLeads = () => (dispatch, getState) => {
    axios.get("/api/leads/", tokenConfig(getState))
        .then(res => {
            dispatch({
                type: GET_LEADS,
                payload: res.data
            });           
        })
        .catch(err => dispatch(returnErrors
        (err.response.data, err.response.status))
    );
};
 
// DELETE LEAD
export const deleteLeads = (id) => (dispatch, getState) => {
    axios.delete(`/api/leads/${id}/`, tokenConfig(getState))
        .then(res => {
            dispatch(createMessage({ deleteLead: "Lead Deleted" }));
            dispatch({
                type: DELETE_LEADS,
                payload: id
            });           
        })
        .catch(err => console.log(err));
};
 
// ADD LEADS
export const addLeads = () => (dispatch, getState) => {
    axios.post("/api/leads/", lead, tokenConfig(getState)) 
// 실제 데이터를 보내기 위한 명령어도 POST입니다. 그러니 post로!
        .then(res => {
        dispatch(createMessage({ addLead: "Lead Added" }));
            dispatch({
                type: ADD_LEADS,
                payload: res.data
            });           
        })
        .catch(err => dispatch(returnErrors
        (err.response.data, err.response.status)));
};
cs

이렇게 모든 과정을 마쳤습니다.

처음 접한다면 저처럼 엄청나게 해메고 오래 걸릴 수도 있습니다.

하지만 여기까지 오셨다면 집념으로 승리하신 것 이니 앞으로는 더 잘 하시겠죠???

지금 시간은 오전 4시 5분이네요.

지금까지 수고 많으셨습니다.

저는 다음 포스팅 주제를 들고 돌아옵니다.

반응형