류림스 공간

[항해99 27일차] 2022.04.02 TIL /로그인, 회원가입 기능 본문

TIL/2022 TIL

[항해99 27일차] 2022.04.02 TIL /로그인, 회원가입 기능

ryurim 2022. 4. 2. 21:23
반응형

<오늘 할 일>

 

1. 2-3 강의 듣기

2. 아침에 청소하기

3. 책 좀 읽기. (모던 자바스크립트)

4. 로그인 회원가입 기능 구현완료하기 ! (이해도 하기!!)

 

강의부터 들으러..고고 !

 

 토큰 기반 인증 [ OAuth2.0 / JWT / 웹 저장소 ] 👈토큰기반인증에 관한 내용과 웹저장소에 대한 내용을 이렇게 정리를 해두었당.

 

날짜를 담당하는 객체

date

let date = new Date();
//Sat Apr 02 2022 09:58:17 GMT+0900 (한국 표준시) {}
date.getTime()
1648861097466
date.setTime(date.getTime()+10000);
1648861107466

하루는

1000밀리초 * 60분 * 24시간

 

shared 폴더에 Cookie.js파일을 만들어서

쿠키 가져오는 거,

쿠키 삭제하는 거,

쿠키 저장하는 거를 만들었다.

 

const getCookie =(name)=>{
    let value= "; "+document.cookie; //가지고옴
    let parts = value.split(`; ${name}=`);

    if(parts.length ===2){ //이때만 실제로 있는 것
        return parts.pop().split(";").shift();
    }
   
};

const setCookie =(name,value,exp = 5)=>{ //이름, 만료일, 값
    let date = new Date();
    date.setTime(date.getTime()+ exp*24*60*60*1000);
    document.cookie= `${name}=${value}; expires=${date.toUTCString()}`;
};
const deleteCookie =(name)=>{
    let date = new Date('2020-01-01').toUTCString();
    console.log(date);
    document.cookie = name + "=; expires="+date;
};
export {getCookie,setCookie,deleteCookie};

 

리덕스 설치하기

# 이건 리덕스와 리덕스 모듈 내에서 경로 이동까지 하게 해줄 히스토리, 라우터와 히스토리를 엮어줄 모듈까지 한번에 설치.
yarn add redux react-redux redux-thunk redux-logger history@4.10.1 connected-react-router@6.8.0
yarn add immer redux-actions

=> 우리가 리덕스 사용할 때 리듀서를 만드는데, 생각보다 귀찮은 작업

액션타입 다 정해주는 데 엄청 길다. 중복되면 안되니까.. 다적고.,

액션 생성 함수 받아온 값으로 액션 객체에 넣어주는 별거 아니지만,, 코드가 길어지면 불편하다.

맨처음에는 생김새때문에 불편하지만, 쓰다보면 편한 아이다.

immer -> 불변성 유지를 편하게 해주는 것

 

덕스구조 

 

import {createAction,handleActions} from "redux-actions"; //액션을 편하게 만들어주는 것, 리듀서를 편하게 만들어주는 것.
import {produce} from "immer"; //불변성 관리

import {getCookie,setCookie,deleteCookie} from "../../shared/Cookie"

//actions 로그인, 로그아웃, 유저정보가져오기
const LOG_IN ="LOG_IN";
const LOG_OUT ="LOG_OUT";
const GET_USER ="GET_USER";

//action creators
// const logIn=(user)=>{
//     return{type:LOG_IN, user}
// }; 아래처럼 간단해짐 
const logIn = createAction(LOG_IN, (user)=>({user}));
const logOut = createAction(LOG_OUT, (user)=>({user}));
const getUser = createAction(GET_USER, (user)=>({user}));

//초기값
const initalState ={
    user:null,
    is_login:false,
};

//리듀서
export default handleActions({
    [LOG_IN] : (state,action)=>produce(state, (draft)=>{
        setCookie("is_login","success");
        draft.user = action.payload.user;
        draft.is_login=true;
    }),
    [LOG_OUT] : (state,action)=>produce(state, (draft)=>{
        
    }),
    [GET_USER] : (state,action)=>produce(state, (draft)=>{
        
    }),
},initalState);
//action creators export
const actionCreateors ={
    logIn,
    logOut,
    getUser,
};
export {actionCreateors};

스토어 만들기 1단계 import

import { createStore, combineReducers, applyMiddleware, compose } from "redux";
import thunk from "redux-thunk";
import { createBrowserHistory } from "history";
import { connectRouter } from "connected-react-router";

import User from "./modules/user";

루트 리듀서 만들기

const rootReducer = combineReducers({
  user: User,
});

미들웨어 준비

const middlewares = [thunk];

// 지금이 어느 환경인 지 알려줘요. (개발환경, 프로덕션(배포)환경 ...)
const env = process.env.NODE_ENV;

// 개발환경에서는 로거라는 걸 하나만 더 써볼게요.
if (env === "development") {
  const { logger } = require("redux-logger");
  middlewares.push(logger);
}

리덕스 데브툴즈 설정 -> 안써도 되는데 쓰면 편하다.

const composeEnhancers =
  typeof window === "object" && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__
    ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({
        // Specify extension’s options like name, actionsBlacklist, actionsCreators, serialize...
      })
    : compose;

미들 웨어 묶기

const enhancer = composeEnhancers(applyMiddleware(...middlewares));

스토어 만들기

let store = (initialStore) => createStore(rootReducer, enhancer);

export default store();

스토어에 히스토리 넣어주기..

export const history = createBrowserHistory();

const rootReducer = combineReducers({
  user: User,
  router: connectRouter(history),
});

// const middlewares = [thunk];
const middlewares = [thunk.withExtraArgument({history: history})];

완성된 스토어 코드스니펫

import { createStore, combineReducers, applyMiddleware, compose } from "redux";
import thunk from "redux-thunk";
import { createBrowserHistory } from "history";
import { connectRouter } from "connected-react-router";

import User from "./modules/user";

export const history =createBrowserHistory();

const rootReducer = combineReducers({
    user: User,
    router:connectRouter(history),
  });

const middlewares = [thunk.withExtraArgument({history:history})];

// 지금이 어느 환경인 지 알려줘요. (개발환경, 프로덕션(배포)환경 ...)
const env = process.env.NODE_ENV;

// 개발환경에서는 로거라는 걸 하나만 더 써볼게요.
if (env === "development") {
  const { logger } = require("redux-logger");
  middlewares.push(logger);
};
const composeEnhancers =
  typeof window === "object" && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__
    ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({
        // Specify extension’s options like name, actionsBlacklist, actionsCreators, serialize...
      })
    : compose;

const enhancer = composeEnhancers(applyMiddleware(...middlewares));

let store = (initialStore) => createStore(rootReducer, enhancer);

export default store();

갑자기 길어져서 당황.

정신이 혼미해진다..나 잘할 수 있겠지?

 

스토어 주입하기

index.js

import React from 'react';
import ReactDOMClient from 'react-dom/client';
import './index.css';
import App from './shared/App';
import { Provider } from 'react-redux';

import store from "./redux/configStore"

const root =ReactDOMClient.createRoot(document.getElementById("root"));
root.render(
  <Provider store={store}>
    <App />
  </Provider>
);

app.js

import React from 'react';
import './App.css';

import {BrowserRouter, Route} from "react-router-dom";
import { ConnectedRouter } from 'connected-react-router';
import { history } from '../redux/configStore';
import PostList from '../pages/PostList';
import Login from '../pages/Login';
import Sign from '../pages/Sign';
import Header from './Header';
import {Grid} from "../elements"

function App() {
  return (
    <React.Fragment>
      <Grid>
        <Header></Header>
        <ConnectedRouter history={history}>
          <Route path="/" exact component={PostList} />
          <Route path="/login" exact component={Login} />
          <Route path="/sign" exact component={Sign}/>
        </ConnectedRouter>
      </Grid>
    </React.Fragment>
  );
}

export default App;

 

파이어베이스 인증 

 

firebase.js

import firebase from "firebase/app";
import "firebase/auth"

const firebaseConfig = {
  apiKey: "",
  authDomain: "",
  projectId: "",
  storageBucket: "",
  messagingSenderId: "",
  appId: "",
  measurementId: ""
};

firebase.initializeApp(firebaseConfig);

const auth = firebase.auth();

export {auth};

이제 회원가입 기능 할 차례 !!!!

 

회원가입 기능

[React] - 파이어베이스 이용해서 회원가입 기능 구현하기 👈이렇게 정리를 해두었당.

 

로그인기능

[React] - 파이어베이스 이용해서 로그인 기능 구현하기👈이렇게 정리를 해두었당.

 

 

아무래도 한번 재빠르게 듣고 과제 제출한다음에..

한번 더 들어야될 것 같다.

 

허접하지만,

로그인,회원가입 기능 구현완료다..

스타일은 강의 다듣고 내가 수정해야겠당.ㅋㅋㅋㅋ

오늘은 여기까짘ㅋㅋㅋㅋㅋㅋ

오늘은 어머님이 오셨는데 ㅠㅠ난 방에서 공부만했당..

이제 거실로 나가서..대화좀 해야지 ..

 

힘들었다. 😁

 

 

<월요일에 할 일>

1. 2주차 숙제하기

2. 3주차-4주차 강의듣기

728x90
반응형
Comments