У меня реализована авторизация с помощью куков, при инициализации 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,
}
}),
Ошибка