get access token from cookie instead of auth header

This commit is contained in:
2023-07-11 17:47:38 +02:00
parent 892cee4a7b
commit 3db8bfb0f8
5 changed files with 42 additions and 5 deletions

View File

@@ -1,4 +1,4 @@
import { Module } from '@nestjs/common' import { MiddlewareConsumer, Module, NestModule } from '@nestjs/common'
import { JwtStrategy } from './modules/auth/strategies/jwt.strategy' import { JwtStrategy } from './modules/auth/strategies/jwt.strategy'
import { ConfigModule } from './settings/config.module' import { ConfigModule } from './settings/config.module'
import { AuthModule } from './modules/auth/auth.module' import { AuthModule } from './modules/auth/auth.module'
@@ -10,6 +10,7 @@ import { JwtRefreshStrategy } from './modules/auth/strategies/jwt-refresh.strate
import { CqrsModule } from '@nestjs/cqrs' import { CqrsModule } from '@nestjs/cqrs'
import { DecksModule } from './modules/decks/decks.module' import { DecksModule } from './modules/decks/decks.module'
import { CardsModule } from './modules/cards/cards.module' import { CardsModule } from './modules/cards/cards.module'
import { LoggerMiddleware } from './infrastructure/middlewares/logs-middleware'
@Module({ @Module({
imports: [ imports: [
@@ -37,4 +38,8 @@ import { CardsModule } from './modules/cards/cards.module'
providers: [JwtStrategy, JwtRefreshStrategy], providers: [JwtStrategy, JwtRefreshStrategy],
exports: [CqrsModule], exports: [CqrsModule],
}) })
export class AppModule {} export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
// consumer.apply(LoggerMiddleware).forRoutes('*') // applies the middleware to all routes
}
}

View File

@@ -0,0 +1,10 @@
import { Injectable, NestMiddleware } from '@nestjs/common'
import { Request, Response, NextFunction } from 'express'
@Injectable()
export class LoggerMiddleware implements NestMiddleware {
use(req: Request, res: Response, next: NextFunction) {
console.log('Received cookies:', JSON.stringify(req.cookies))
next()
}
}

View File

@@ -8,6 +8,12 @@ import { pipesSetup } from './settings/pipes-setup'
async function bootstrap() { async function bootstrap() {
const app = await NestFactory.create(AppModule) const app = await NestFactory.create(AppModule)
app.enableCors({
origin: true,
credentials: true,
})
app.use(cookieParser())
app.setGlobalPrefix('v1') app.setGlobalPrefix('v1')
const config = new DocumentBuilder() const config = new DocumentBuilder()
.setTitle('Flashcards') .setTitle('Flashcards')
@@ -18,7 +24,6 @@ async function bootstrap() {
SwaggerModule.setup('docs', app, document) SwaggerModule.setup('docs', app, document)
pipesSetup(app) pipesSetup(app)
app.useGlobalFilters(new HttpExceptionFilter()) app.useGlobalFilters(new HttpExceptionFilter())
app.use(cookieParser())
await app.listen(process.env.PORT || 3000) await app.listen(process.env.PORT || 3000)
const logger = new Logger('NestApplication') const logger = new Logger('NestApplication')
logger.log(`Application is running on: ${await app.getUrl()}`) logger.log(`Application is running on: ${await app.getUrl()}`)

View File

@@ -48,8 +48,14 @@ export class AuthController {
const userData = req.user.data const userData = req.user.data
res.cookie('refreshToken', userData.refreshToken, { res.cookie('refreshToken', userData.refreshToken, {
httpOnly: true, httpOnly: true,
// secure: true, sameSite: 'none',
path: '/v1/auth/refresh-token', path: '/v1/auth/refresh-token',
secure: true,
})
res.cookie('accessToken', userData.accessToken, {
httpOnly: true,
sameSite: 'none',
secure: true,
}) })
return { accessToken: req.user.data.accessToken } return { accessToken: req.user.data.accessToken }
} }

View File

@@ -4,6 +4,7 @@ import { ExtractJwt, Strategy } from 'passport-jwt'
import { AuthService } from '../auth.service' import { AuthService } from '../auth.service'
import { AppSettings } from '../../../settings/app-settings' import { AppSettings } from '../../../settings/app-settings'
import { UsersService } from '../../users/services/users.service' import { UsersService } from '../../users/services/users.service'
import { Request as RequestType } from 'express'
@Injectable() @Injectable()
export class JwtStrategy extends PassportStrategy(Strategy) { export class JwtStrategy extends PassportStrategy(Strategy) {
@@ -13,7 +14,10 @@ export class JwtStrategy extends PassportStrategy(Strategy) {
private userService: UsersService private userService: UsersService
) { ) {
super({ super({
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(), jwtFromRequest: ExtractJwt.fromExtractors([
JwtStrategy.extractJWT,
ExtractJwt.fromAuthHeaderAsBearerToken(),
]),
ignoreExpiration: false, ignoreExpiration: false,
secretOrKey: appSettings.auth.ACCESS_JWT_SECRET_KEY, secretOrKey: appSettings.auth.ACCESS_JWT_SECRET_KEY,
}) })
@@ -26,4 +30,11 @@ export class JwtStrategy extends PassportStrategy(Strategy) {
} }
return user return user
} }
private static extractJWT(req: RequestType): string | null {
if (req.cookies && 'accessToken' in req.cookies && req.cookies.accessToken.length > 0) {
return req.cookies.accessToken
}
return null
}
} }