인프런 커뮤니티 질문&답변

GI P님의 프로필 이미지
GI P

작성한 질문수

Slack 클론 코딩[백엔드 with NestJS + TypeORM]

local serializer, guard

로그인을 해도 LoggedInGuard쪽에서 false값이 나옵니다.

작성

·

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를 반환하는 것 같습니다. 이 문제는 주로 세션이 제대로 설정되지 않았거나, 인증 관련 미들웨어가 잘못 설정되면서 발생할 수 있습니다. 아래 몇 가지 체크포인트를 확인해보시기 바랍니다:

  1. 세션 설정 확인: express-session 라이브러리를 사용하여 세션을 설정했는지 확인해보세요. main.ts 혹은 서버 초기화 파일에서 다음과 같이 설정해야 합니다.

    app.use(
     session({
       secret: 'your-secret-key',
       resave: false,
       saveUninitialized: false,
     }),
    );
    
  2. Passport 미들웨어 설정: passport.initialize()passport.session()을 사용하여 Passport를 초기화했는지 확인하세요.

    app.use(passport.initialize());
    app.use(passport.session());
    
  3. 로그인 절차 확인: 사용자가 로그인할 때, passport.authenticate() 함수가 제대로 호출되어 세션이 설정되는지 확인하세요.

  4. UserSerializer 및 Deserializer 확인: serializeUserdeserializeUser에서 사용자의 정보를 세션에 저장하고 설정하는 부분이 올바르게 되어 있는지 확인하세요.

이와 유사한 질문과 해결 방법은 아래 링크에서 자세히 살펴보실 수 있습니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

GI P님의 프로필 이미지
GI P

작성한 질문수

질문하기