본문 바로가기

Project/TIL

20.03.18 ShareBook TIL

로그인 함수와 로그인을 했을때 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