[세션30] fetchUser시 UseGuard 401에러
안녕하세요,
jwt토큰을 입력하여 사용자 인가를 받고 싶은데 그 과정에서 계속 오류가 나서 문의드립니다. 제가 확인하기로는 코드도 정확히 입력하고, HTTP HEADERS로 보내주는 토큰도 문제 없어서요.
에러 강의에서 jwt를 넣어주지 않았을 때 발생한다는 에러가 발생합니다.
제가 보기에는 토큰값이 잘못된것 같은데, login으로 받아온 토큰을 바로 넣는거라 만료가 되지도 않았을텐데 해결이 안되네요.



제 코드는 아래와 같습니다.
users.resolver.ts
// users.resolver.ts
import { Args, Int, Mutation, Query, Resolver } from '@nestjs/graphql';
import { User } from './entities/user.entity';
import { UsersService } from './users.service';
import * as bcrypt from 'bcrypt';
import { UseGuards } from '@nestjs/common';
import { GqlAuthAccessGuard } from '../auth/guards/gql-auth.guard';
// import { AuthGuard } from '@nestjs/passport';
// 추가
@Resolver()
export class UsersResolver {
constructor(
private readonly usersService: UsersService, //
) {}
@UseGuards(GqlAuthAccessGuard) // 수정
@Query(() => String)
fetchUser(): string {
console.log('인가에 성공하였습니다');
return '인가에 성공하였습니다.';
}
@Mutation(() => User)
async createUser(
@Args('email') email: string,
@Args('password') password: string,
@Args('name') name: string,
@Args({ name: 'age', type: () => Int }) age: number,
): Promise<User> {
// const hashedPassword = await bcrypt.hash(password, 10);
// return this.usersService.create({ email, hashedPassword, name, age });
// }
return this.usersService.create({ email, password, name, age });
}
}
gql-auth.guard.ts
import { ExecutionContext } from '@nestjs/common';
import { GqlExecutionContext } from '@nestjs/graphql';
import { AuthGuard } from '@nestjs/passport';
export class GqlAuthAccessGuard extends AuthGuard('access') {
getRequest(context: ExecutionContext) {
const gqlContext = GqlExecutionContext.create(context);
return gqlContext.getContext().req;
}
}
jwt-access.strategy.ts
import { PassportStrategy } from '@nestjs/passport';
import { ExtractJwt, Strategy } from 'passport-jwt';
export class JwtAccessStrategy extends PassportStrategy(Strategy, 'access') {
constructor() {
super({
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
secretOrKey: '나의비밀번호',
});
}
validate(payload) {
console.log('페이로드', payload);
return {
id: payload.sub,
};
}
}
auth.module.ts
import { Module } from '@nestjs/common';
import { AuthResolver } from './auth.resolver';
import { AuthService } from './auth.service';
import { UsersModule } from '../users/users.module';
import { JwtModule } from '@nestjs/jwt';
import { JwtAccessStrategy } from './strategy/jwt-access.strategy';
@Module({
imports: [
JwtModule.register({}),
UsersModule, // 서비스를 각각 불러오기보다는 module을 통으로 불러오는게 낫다. 원래는 import 에 TypeOrmModule.forFeature([Users])& providers에 UsersServie가 있었음.
],
providers: [
JwtAccessStrategy,
AuthResolver, //
AuthService, //
],
})
export class AuthModule {}
답변 1
0
안녕하세요! yskim님!
코드는 잘 작성해 주신 것 같아요!
해당 에러는 일반적으로 토큰이 만료되었거나 비밀번호가 틀렸거나 할 때 나오는 메시지예요!
따라서, 나의비밀번호가 잘 작성되어 있는지, 수업때 리프레시 토큰 수업을 진행하기 위해 시로 토큰 만료시간을 10초로 변경했었는데 이때문에 너무 빨리 만료된 것은 아닌지, 로그인 api를 한번 확인해 보아야 할 것 같아요!
그래프 ql 문서 사용할때 느낌표 남는거 어떻게 없애나요?
0
84
2
강의 전체 소스 코드를 받고싶습니다.
0
76
2
fontawesome 사용 문의
0
79
2
소스 코드 부탁드립니다~
0
85
2
깃 레포지터리 소스
0
87
2
커리큘럼12.css 정렬 에 나오는 과제 정답알고싶어요
0
74
2
10-01 Entity TypeOrmModule.forRoot 에 entities
0
89
3
강의 버전관련 문의입니다
0
103
2
Ubuntu 설치 관련
0
61
1
schema.gql 질문 드립니다.
0
51
1
서버 재실행시 Many to Many
0
102
3
input 관련 문의
0
90
2
Rest API 보다는 graphql이 주된 내용인데
0
131
2
강의 전체 소스코드 받을수있을까요?
0
156
1
도커볼륨 마운트 관련
0
127
2
findOne 타입스크립트오류
0
109
1
http => htrtps 호출 인증서 신뢰 오류
0
354
1
self-signed certificate in certificate chain 에러 발생
0
418
1
mongoose 설치 오류
0
142
1
특정 API, 특정 IP 허용 (단일경로에 CORS 활성화)
0
283
2
08-06
0
180
3
구조랑 패턴 관련해서 질문
0
125
2
mydocker
0
128
2
coolsms statuscode 2000 인데 전송안돼는 경우 확인.
0
156
1





