TIL 20211020[第9935便]
ログイン、会員アカウントの作成
作成 Login、SignUpビューページ リドスモジュールの作成(リドス構造の作成)
Action、action creaters、reduce先作成(ミドルウェアは後で作成) axiosファイルの作成
axiosをより使いやすくするには、ファイルを作成し、使用するAPIをモジュール化することが望ましい. Cookieファイルの作成
サーバからトークンを受信しCookieから保存する場合、name(変数名)=トークン値として格納されます.
だから後でコインを送るときは、
今回サーバ側でトークンを送信する場合、このように ミドルウェアの作成
JWTがlocalStorageに格納されている格納方式が悪いという記事を見て、まずコメント処理を行いました.
この部分については、さらに勉強する必要があるかもしれません.JWTは難しい...😢
JWTでログインする場合、Cookieに保存するかlocalStorageに保存するかはさらに勉強する必要があります.私はまだこの部分をよく理解していません...😢
また,後で文章を書くとき,修正するとき,など,トークン値をサーバに送ってプレイヤーを確認するとき,今回のノードはBeare形式でトークンを送るように要求する.Beareも初めて知り合って勉強することになりました…!
作成
//import 생략
//Login Component, SignUp Component도 로그인 페이지와 비슷하다.
const Login = (props) => {
// dispatch 사용을 위해 선언
const dispatch = useDispatch();
// 입력된 값을 저장하기 위해 useState 사용
const [id, setId] = React.useState("");
const [pw, setPw] = React.useState("");
// 로그인 버튼 클릭했을때 실행될 login 함수
const login = () => {
//setLoginDB로 id와 pw값을 보낸다.
dispatch(userCreators.setLoginDB(id, pw));
};
return (
<React.Fragment>
// 뷰 생략
</React.Fragment>
);
};
export default Login;
Action、action creaters、reduce先作成(ミドルウェアは後で作成)
//redux-actions 가져오기
import { createAction, handleActions } from "redux-actions";
//immer 가져오기
import { produce } from "immer";
//Cookie 가져오기
import { deleteCookie, setCookie } from "../../shared/Cookie";
//axios 가져오기
import { apis } from "../../shared/api";
//actions
const LOGIN = "LOGIN";
const LOGOUT = "LOGOUT";
//actions creators
const setLogin = createAction(LOGIN, (user) => ({ user }));
const logOut = createAction(LOGOUT, (user) => ({ user }));
//initialState(초기값)
const initialState = {
user: null,
is_login: false,
};
//reducer
export default handleActions(
{
//어떤 액션에 대한 내용인지 바로 작성 ex.[LOGIN]
[LOGIN]: (state, action) =>
produce(state, (draft) => {
//setCookie("is_login", "success");
//기본값인 initialState의 user에 user정보 넣기
draft.user = action.payload.user;
//기본값인 initialState의 is_login을 true로 변경
draft.is_login = true;
}),
[LOGOUT]: (state, action) => produce(state, (draft) => {}),
},
//기본값
initialState
);
// action creator export
const userCreators = {
setLogin,
logOut,
signupDB,
setLoginDB,
logOutDB,
loginCheckDB,
};
export { userCreators };
axiosをより使いやすくするには、ファイルを作成し、使用するAPIをモジュール化することが望ましい.
// axios, API 모듈화 작업
import axios from "axios";
const api = axios.create({
//baseURL -> 통신할 서버 주소 넣기
baseURL: "http://",
headers: {
"content-type": "application/json;charset=UTF-8",
accept: "application/json,",
},
});
export const apis = {
// User
login: (id, pw) =>
//("")안에는 백엔드와 api설계때 정한 url을 넣어준다.
api.post("/api/users/login", {
//key:value 형식인데 여기서 key값에는 꼭 api설계때 request 정한 키값으로 작성
loginId: id,
userPw: pw,
}),
signup: (id, pw, name, nick) =>
api.post("/api/users/register", {
userId: id,
userPw: pw,
userName: name,
userNameId: nick,
}),
サーバからトークンを受信しCookieから保存する場合、name(変数名)=トークン値として格納されます.
だから後でコインを送るときは、
name(변수명)=
という部分を外します.今回サーバ側でトークンを送信する場合、このように
Bearer 토큰값
を送信することができます.Beareの後ろにスペースがあることを覚えて...!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()}`;
console.log("aaa", document.cookie);
};
const deleteCookie = (name) => {
let date = new Date("2020-01-01").toUTCString();
console.log(date);
document.cookie = name + "=; expires=" + date;
console.log("bbb", document.cookie);
};
export { setCookie, deleteCookie };
JWTがlocalStorageに格納されている格納方式が悪いという記事を見て、まずコメント処理を行いました.
この部分については、さらに勉強する必要があるかもしれません.JWTは難しい...😢
// middleware actions
//회원가입
const signupDB = (id, pw, name, nick) => {
return function (dispatch, getState, { history }) {
apis
.signup(id, pw, name, nick)
.then((res) => {
console.log(res);
history.push("/login");
})
.catch((err) => {
window.alert("이미 존재하는 아이디입니다.");
console.log(err);
});
};
};
//로그인
const setLoginDB = (id, pw) => {
return function (dispatch, getState, { history }) {
apis
.login(id, pw)
.then((res) => {
console.log(res);
setCookie("token", res.data.token, 5);
console.log(res.data.token);
//localStorage.setItem("userId", id);
dispatch(setLogin({ id }));
history.replace("/");
})
.catch((err) => {
window.alert("아이디 및 비밀번호를 확인해주세요!");
});
};
};
今日サーバーと連動した時は、会員登録や会員登録に時間がかかると思っていたのですが、思ったより早く解決してしまい、慌ててしまいました・・・確かに前回停車した時に連動の方法を体験したので、スピードが速くなったようです.JWTでログインする場合、Cookieに保存するかlocalStorageに保存するかはさらに勉強する必要があります.私はまだこの部分をよく理解していません...😢
また,後で文章を書くとき,修正するとき,など,トークン値をサーバに送ってプレイヤーを確認するとき,今回のノードはBeare形式でトークンを送るように要求する.Beareも初めて知り合って勉強することになりました…!
Reference
この問題について(TIL 20211020[第9935便]), 我々は、より多くの情報をここで見つけました https://velog.io/@arong/TIL-20211020-항해99-35일차テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol