如何从Bearer token中提取token字符串?我需要这个方法befor @UseGuards(JwtAuthGuard)在巢?我使用nextjs作为前端

nkcskrwz  于 2023-08-04  发布在  其他
关注(0)|答案(2)|浏览(127)

我在Nextjs中使用fetch方法

async function fetchProfile() {
    const res = await fetch(`http://localhost:5000/api/v1/users/1`, {
      method: "GET",
      headers: {
        "Content-Type": "application/json",
        "token": "Bearer " + localStorage.getItem("token")
      }
    })
}

字符串
这是我的控制器

@UseGuards(JwtAuthGuard)
  @Get(':id')
  findOne(@Param('id', ParseIntPipe) params: { id: number }, @Req() req) {
    console.log(req);
    return this.userService.findOne(params.id, req);
  }


如果我注解第一行,则为控制台日志提供一个标记,如

token: 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjEiLCJlbWFpbCI6ImF6YWQuaG9zc2VpbjIzQGdtYWlsLmNvbSIsImlhdCI6MTY5MDA5NzE4OX0._ncc6g71l8mrmgNTUUybhPRG696tX8sE3GAL-Fs_Kzo',

qij5mzcb

qij5mzcb1#

你可以从你的策略中做到这一点:

export class JwtAppStrategy extends PassportStrategy(Strategy, 'strategy-name') {
  constructor(private config: ConfigService, private userService: UserService) {
    super({
      jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(), // extract from header
      secretOrKey: 'secret',
    });
  }

  async validate(payload: { id: number }) {
    // custom logic
    return true;
  }
}

字符串

vsaztqbk

vsaztqbk2#

我使用这个策略,并且工作得很完美

constructor() {
    super({
      jwtFromRequest: ExtractJwt.fromExtractors([
        JwtStrategy.extractJWT,
        ExtractJwt.fromAuthHeaderAsBearerToken(),
      ]),
      // passReqToCallback: true,
      secretOrKey: jwtSecret,
    });
  }

  private static extractJWT(req: Request): string | null {
    if (req.cookies && 'token' in req.headers) {    
      return JwtStrategy.extractToken(req);
    }
    return null;
  }

  private static extractToken(req) {
    if (req.headers.token && req.headers.token.split(' ')[0] === 'Bearer') {
      return req.headers.token.split(' ')[1];
    } else if (req.query && req.query.token) {
      return req.query.token;
    }
    return null;
  }

字符串

相关问题