작성
·
31
·
수정됨
0
import { createParamDecorator, ExecutionContext } from '@nestjs/common';
//저장된 사용자 정보에 접근 가능
export const User = createParamDecorator(
(data: unknown, ctx: ExecutionContext) => {
const request = ctx.switchToHttp().getRequest();
console.log('사용자', request.user.id);
return request.user;
},
);
위에있는것은 로그인을 하게되면 유저의 아이디값을 가져오는데
로그인가드쪽을 보면 여기서는 자꾸 false값이 나옵니다.
다른쪽 로직도 작업하신 코드 그대로 사용을 했는데 왜자꾸 false값만 나올까요....
import { Injectable, CanActivate, ExecutionContext } from '@nestjs/common';
import { Request } from 'express';
import { Observable } from 'rxjs';
@Injectable()
export class LoggedInGuard implements CanActivate {
canActivate(
context: ExecutionContext,
): boolean | Promise<boolean> | Observable<boolean> {
const request = context.switchToHttp().getRequest() as Request;
console.log('로그인햇니?????????', request.isAuthenticated());
return request.isAuthenticated();
}
}
로그인 유지가 안되는거로 보이기는 하는데 해결법이 있을까요?
답변 2
0
먼저 서버가 재시작돼서 로그인이 풀리는 게 아닌지 먼저 확인해보시고요.
그게 아니라면 익스프레스 세션/패스포트 설정 문제로 보이는데요. 해당 부분 소스코드 확인해보셔야할 것 같습니다
0
안녕하세요, 인프런 AI 인턴입니다.
GI P님께서 겪고 계신 문제는 LoggedInGuard
를 활용하여 인증 여부를 확인할 때 request.isAuthenticated()
함수가 항상 false
를 반환하는 것 같습니다. 이 문제는 주로 세션이 제대로 설정되지 않았거나, 인증 관련 미들웨어가 잘못 설정되면서 발생할 수 있습니다. 아래 몇 가지 체크포인트를 확인해보시기 바랍니다:
세션 설정 확인: express-session
라이브러리를 사용하여 세션을 설정했는지 확인해보세요. main.ts
혹은 서버 초기화 파일에서 다음과 같이 설정해야 합니다.
app.use(
session({
secret: 'your-secret-key',
resave: false,
saveUninitialized: false,
}),
);
Passport 미들웨어 설정: passport.initialize()
와 passport.session()
을 사용하여 Passport를 초기화했는지 확인하세요.
app.use(passport.initialize());
app.use(passport.session());
로그인 절차 확인: 사용자가 로그인할 때, passport.authenticate()
함수가 제대로 호출되어 세션이 설정되는지 확인하세요.
UserSerializer 및 Deserializer 확인: serializeUser
와 deserializeUser
에서 사용자의 정보를 세션에 저장하고 설정하는 부분이 올바르게 되어 있는지 확인하세요.
이와 유사한 질문과 해결 방법은 아래 링크에서 자세히 살펴보실 수 있습니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.