Задать вопрос
@dovzzhenko

Почему getServerSideProps в next+apollo постоянно выдает ошибку Unauthorized?

У меня реализована авторизация с помощью куков, при инициализации ApolloClient указан линк авторизации, где в заголовках есть токен. Но при попытке загрузить данные с помощью getServerSideProps я всегда получаю ошибку Unauthorized, хотя без getServerSideProps все работает.
Это мой первый опыт с apollo, так что я не совсем понимаю как это исправить

Мой ApolloClient:
import { parseCookies } from 'nookies'
import { setContext } from '@apollo/client/link/context';
import { ApolloClient, InMemoryCache, createHttpLink } from '@apollo/client'

const cookies = parseCookies()

const httpLink = createHttpLink({
    uri: 'http://localhost:3001/graphql',
});

const authLink = setContext((_, { headers }) => {
    const token = cookies.access_token
    return {
        headers: {
            ...headers,
            authorization: token ? `Bearer ${token}` : "",
        }
    }
});

export let client = new ApolloClient({
    cache: new InMemoryCache(),
    credentials: 'same-origin',
    link: authLink.concat(httpLink),
})


Компонент с getServerSideProps
export default function Suggestions({ users }: any) {

    return (<MainLayout>
        {JSON.stringify(users)}
    </MainLayout>)
}

export async function getServerSideProps(context: GetServerSidePropsContext) {
    const { data } = await client.query({
        query: GET_USERS
    });

    return {
        props: { users: data.users },
    }
}


Main.js файл на бекенде (бек на Nestjs)
async function bootstrap() {
  const app = await NestFactory.create<NestExpressApplication>(AppModule, { cors: true });
  app.useGlobalPipes(new ValidationPipe())
  app.useGlobalGuards(new JwtAuthGuard(new Reflector()))
  app.enableCors({
    origin: 'http://localhost:3000',
    credentials: true,
    allowedHeaders: 'Origin,X-Requested-With,Content-Type,Accept,Authorization,authorization'
  })

  await app.listen(3001);
}

bootstrap();


И Graphql в App.module на беке

@Module({
  imports: [
    GraphQLModule.forRoot({
      autoSchemaFile: path.join(process.cwd(), 'src/schema/gql'),
      sortSchema: true,
      driver: ApolloDriver,
      context: ({ req, res }) => ({ req, res }),
      cors: {
        origin: 'http://localhost:3000',
        credentials: true,
      }
    }),


Ошибка
62d6c1c70fa38426400129.png
  • Вопрос задан
  • 55 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы