이번엔 React를 이용해 로그인 과정을 구현해보겠다.
참조한 링크는 이 곳이다.
소스는 기존 포스팅, React-Node-Mysql 통합환경구축을 기반으로 시작한다.
전체 파일 트리와 package.json은 다음과 같다.
// File tree
(project_name)
└ (app)
└ App.js
└ Hello.js
└ Home.js
└ LoginPanel.js
└ UserInfo.js
└ (public)
└ index.html
└ login.html
└ style.css
└ (server)
└ (config)
└ db-config.json
└ main.js
└ package.json
└ webpack.config.js
// Package.json
{
"name": "third_react_comp",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"clean": "rm -rf build public/bundle.js",
"build": "./node_modules/.bin/babel server --out-dir build && ./node_modules/.bin/webpack --progress",
"start": "rm -rf build public/bundle.js && ./node_modules/.bin/babel server --out-dir build && ./node_modules/.bin/webpack --progress && node ./build/main.js"
},
"author": "refgjin",
"license": "ISC",
"devDependencies": {
"babel-core": "~6.7.*",
"babel-cli": "~6.9.*",
"babel-loader": "~6.2.*",
"babel-plugin-react-transform": "^2.0.2",
"babel-preset-es2015": "~6.6.*",
"babel-preset-react": "~6.5.*",
"webpack": "^1.12.*",
"webpack-dev-server": "^1.10.*"
},
"dependencies": {
"babel-polyfill": "~6.7.*",
"body-parser": "^1.17.1",
"express": "^4.14.1",
"mysql": "^2.11.1",
"react": "^0.13.*",
"react-addons-css-transition-group": "^15.4.2",
"react-alert": "^1.0.14",
"react-cookie": "^1.0.5",
"react-dom": "^15.0.0",
"whatwg-fetch": "^0.11.0"
}
}
변경된 App.js 파일이다.
기존 코드에서 Hello.js를 직접 참조했던 것과 다르게 Home.js를 먼저 참조한다.
이유는 다음 코드를 보며 설명하겠다.
Home 컴포넌트는 userId가 존재한다면 Hello 컴포넌트를 불러오며,
존재하지 않을 경우 LoginPanel 컴포넌트를 부른다.
LoginPanel 컴포넌트는 fetch를 이용해 API 서버에서 아이디-비밀번호 검사를 하고 존재할 경우,
Home 컴포넌트에서 받은 onSuccess함수로 userId를 전달하며,
Home 컴포넌트의 state.userId가 갱신되는 순간 바로 unmount 된다.
변경된 Hello 컴포넌트다. 부모 컴포넌트로부터 userId와 onLogout을 받아서 UserInfo 컴포넌트에서 전달하며,
기존 기능은 동일하다.
UserInfo 컴포넌트는 Home 컴포넌트로부터 받은 userId를 렌더링하고,
onLogout함수를 로그아웃 버튼에 binding한다.
마지막으로 변경된 server/main.js다.
app/loginPanel.js에서 요청한 /login에 대해 아이디-비밀번호 체크를 제공한다.
Comments