로그인 함수와 로그인을 했을때 JWT를 사용하여 토큰을 발급해주는 함수를 작성하였다.
import { Router, Request, Response, NextFunction } from 'express';
import jwt from 'jsonwebtoken';
import { Users } from '../../../models/Users';
// require('dotenv').config();
// import 'dotenv/config';
const signin = Router();
const jwtSecret = String(process.env.JWT_SECRET);
signin.post(
'/signin',
async (req: Request, res: Response, next: NextFunction) => {
const { email, password } = req.body;
try {
const signin = await Users.findOne({
where: {
email: email,
password: password,
},
}).then(data => {
if (data) {
let token = jwt.sign(
{
userid: data.id,
email: email,
},
jwtSecret,
{
expiresIn: '10m',
},
);
res.cookie('data', token);
res.json({
token: token,
});
} else {
res.status(400).send('가입 되지 않은 회원입니다');
}
});
} catch (err) {
console.error(err);
next(err);
}
},
);
export default signin;
type 설정이 익숙치 않아서 javascript 스타일로 작성하다보면 계속 type 에러가 났다.
구글링해가며 보안이 필요한 것들은 .env에 넣어서 사용하려고 했는데 .env에 넣어두어도 계속 타입 에러가 났다.
node_moduels/@types/node/globals.d.ts에
interface ProcessEnv {
[key: string]: string | undefined;
}
==============수정========================
interface ProcessEnv {
[key: string]: string;
}
코드를 수정하여 사용하였는데 지정해 놓은 속성은 건들면 안될꺼같아서
String(process.env.JWT_SECRET)
이런 식으로 타입을 지정해주었다. 좀 더 편한 방법이 있을텐데 레퍼런스들이 하나같이 이해하기 어려웠다.
Users table과 Books table에 관계설정을 해주웠다.
한명의 유저는 여러가지 책을 가질 수있기 때문에 일대다 관계를 설정해 주었다.
// User Table
@HasMany(() => Books)
books!: Books[];
// Books Table
@ForeignKey(() => Users)
@Column
userOwnerId!: number;
@BelongsTo(() => Users)
book!: Users;
어떻게 유저의 지역 정보와 같은 Books 컬럼의 주소를 찾아 해당 지역에 있는 대여 가능한 책들만 보여줄 수 있을까?
'Project > TIL' 카테고리의 다른 글
20.03.20 ShareBook TIL (0) | 2020.03.20 |
---|---|
20.03.19 ShareBook TIL (0) | 2020.03.20 |
20.03.17 ShareBook TIL (0) | 2020.03.18 |
20.03.16 ShareBook TIL (0) | 2020.03.17 |
20.03.15 ShareBook TIL (0) | 2020.03.16 |