들어가기
jsonwebtoken을 이용해서 토큰을 만들어본다
npm i jsonwebtoken
npm i @types/jsonwebtoken --only-dev
import * as jwt from 'jsonwebtoken
https://www.npmjs.com/package/jsonwebtoken
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
envFilePath: process.env.NODE_ENV === 'dev' ? '.env.dev' : '.env.test',
ignoreEnvFile: process.env.NODE_ENV === 'prod',
validationSchema: Joi.object({
NODE_ENV: Joi.string().valid('dev', 'prod').required(),
DB_HOST: Joi.string().required(),
DB_PORT: Joi.string().required(),
DB_USERNAME: Joi.string().required(),
DB_PASSWORD: Joi.string().required(),
DB_NAME: Joi.string().required(),
PRIVATE_KEY: Joi.string().required(), <-------
}),
}),
app.module.ts의 ConfigModule안아 PRIVATE_KEY를 넣어준다.
PRIVATE_KEY를 설정한다. 아무거나 닥치는대로 적으면 된다.
import { Module } from '@nestjs/common';
import { UserResolver } from './users.resolver';
import { UserService } from './users.service';
import { TypeOrmModule } from '@nestjs/typeorm';
import { User } from './entities/user.entity';
import { ConfigService } from '@nestjs/config';
@Module({
imports: [TypeOrmModule.forFeature([User]), ConfigService],
///원래는 imports에 ConfigService를 넣어주어야한다.
///UserModule에서 ConfigModule 사용을 위해서
///하지만 app.module.ts에서 ConfigModule에 isGlobal:true
///를 넣어주면, imports에 않넣어줘도 된다.
providers: [UserResolver, UserService],
exports: [UserService],
})
export class UsersModule {}
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true, ///다른 모듈에서 사용할때, imports안해도 됨.
///isGlobal:true 는 전역변수
envFilePath: process.env.NODE_ENV === 'dev' ? '.env.dev' : '.env.test',
ignoreEnvFile: process.env.NODE_ENV === 'prod',
validationSchema: Joi.object({
NODE_ENV: Joi.string().valid('dev', 'prod').required(),
DB_HOST: Joi.string().required(),
DB_PORT: Joi.string().required(),
DB_USERNAME: Joi.string().required(),
DB_PASSWORD: Joi.string().required(),
DB_NAME: Joi.string().required(),
PRIVATE_KEY: Joi.string().required(),
}),
}),
@Injectable()
export class UserService {
constructor(
@InjectRepository(User) private readonly users: Repository<User>,
private readonly config: ConfigService,
private readonly jwtService: JwtService,
) {}
혹은, user.service.ts에서 configModule을 사용하고자 한다면,
constructor에서 config: ConfigService를 불러준다.
그리고 나서
async login({
email,
password,
}: LoginInput): Promise<{ ok: boolean; error?: string; token?: string }> {
try {
const user = await this.users.findOneBy({ email });
if (!user) {
return {
ok: false,
error: 'User not found',
};
}
const passwordCorrect = await user.checkPassword(password);
if (!passwordCorrect) {
return {
ok: false,
error: 'Wrong password',
};
}
// const token = jwt.sign({ id: user.id }, this.config.get('PRIVATE_KEY'));
///JWT모듈을 사용하지 않을꺼면, 위와 같이 token을 만들어서 return시키면 된다.
///하지만, JWT모듈을 만들어서 token을 발급할 예정이라 위에 // 을 그어놓은것임.
const token = this.jwtService.sign({ id: user.id });
return {
ok: true,
token,
};~~~~
By pressing the keys at the right time in Sprunki Mod you will create reasonable sounds, rhythms and harmonies, thereby giving players the feeling of being a real music producer.
Hydra Game https://hydralauncher.net/ features an integrated BitTorrent client and a self-managed repack scraper. Developed using TypeScript (Electron) and Python, the launcher utilizes libtorrent for managing torrents efficiently. https://cricfy.app/