200401_TIL
// controller/login
const { User } = require("../../models");
const bcrypt = require("bcrypt");
const jwt = require("jsonwebtoken");
//const secretKey = require("../../config/jwt");
process.env.SECRET_KEY = "codestates";
//TODO: 유저 로그인 부분
// * User Token 생성 함수
// getToken: function() {
// var token = jwt.sign({
// id: this.id
// }, secret);
// return token;
// }
module.exports = {
post: (req, res) => {
// 이메일로 찾는다.
User.findOne({
where: {
email: req.body.email
}
})
.then(data => {
console.log(data.dataValues.email, "저장되어 있는 유저정보-이메일");
// ! 전략 , 이미지만 토큰의 영향을 주지 않게 하여 자유롭게 바뀌게 한다.
if (data) {
// 이미지가 아닐
//?bcrypt 의 compareSync함수를 사용해서 저장된 hash와 입력받은 password의 hash가 일치하는지 확인
if (bcrypt.compareSync(req.body.password, data.password)) {
let token = jwt.sign(
{
id: data.dataValues.id,
email: data.dataValues.email,
username: data.dataValues.username
},
process.env.SECRET_KEY,
{
expiresIn: "1d" // 1일 유효하도록 설정
}
);
res.send(token);
}
} else {
res.status(400).json({ error: "가입되지 않은 유저입니다." });
}
})
.catch(err => {
res.status(400).json({ error: err });
});
}
};
// routes/users.js
// url: "users/signin"
router.post("/signin", userController.login.post); //* 로그인
* 오늘 생긴 에러
* index.js:1 mapDispatchToProps() in Connect(Flashcard) must return a plain object. Instead received undefined.
![](https://velog.velcdn.com/images%2Fhy9202%2Fpost%2F40e9ce39-b018-40fe-8bc7-a3cbb98222d0%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202020-04-01%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%202.08.26.png)
* DataCloneError: Failed to execute 'pushState' on 'History': cardId => {
dispatch(Object(_actions_cardActions__WEBPACK_IMPORTED_MODULE_3__["handleHintedPost"])(cardId));
} could not be cloned.
==========================================
부모 컴포넌트에서 mapDispatchToProps로 내려받은 props를 자식 컴포넌트의 Link state으로 주려고 했을 때 생긴 오류
![](https://velog.velcdn.com/images%2Fhy9202%2Fpost%2F66ceb8f6-9ac9-4bbb-9a49-4e6a2e2b5391%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202020-04-01%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%202.14.02.png)
***
* 오늘 해결해야 할 부분
* AddCard 시 fill-in-the-blank에서...ㅠㅠㅠ
![](https://velog.velcdn.com/images%2Fhy9202%2Fpost%2Fb8f5cc59-63c6-4777-bdc5-fa2f0f01283b%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202020-04-01%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%203.14.25.png)
* marked, hinted 페이지 재접속해야 반영...?
![](https://velog.velcdn.com/images%2Fhy9202%2Fpost%2F69a1c316-6f45-49e9-b6cd-86a6c3c8cdf0%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202020-04-01%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%203.18.07.png)
* local storage에 저장된 usertoken 파기해서 logout
```javascript
handleLogout(e) {
// console.log(localStorage.usertoken);
// console.log(localStorage);
e.preventDefault();
// localStorage.removeItem("token");
localStorage.clear(); //* local storage clear
console.log(localStorage); //* => Storage {length: 0}
// this.setState({ isLogout: true });
this.props.history.push("/login");
}
===> token 파기
===> error