Next.js Clerk против NextIntl. Конфликт промежуточного программного обеспечения

Вот три примера проектов на github:

  1. Клерк + Следующий-МЕЖД. Не работает https://github.com/alexmeyercz/clerk-vs-next-intl-both
  2. Только клерк. Работает отлично. https://github.com/alexmeyercz/clerk-vs-next-intl-clerk-only
  3. Дальше-только INTL. Работает отлично. https://github.com/alexmeyercz/clerk-vs-next-intl-intl-only

В соответствии с документацией выполнена только первоначальная настройка.

Я попытался настроить middleware.ts в соответствии с документацией (пример: интеграция с Clerk ): https://next-intl-docs.vercel.app/docs/routing/middleware#example-integrating-with-clerk

import { authMiddleware } from '@clerk/nextjs'
import createMiddleware from 'next-intl/middleware'

const intlMiddleware = createMiddleware({
  locales: ['en', 'de'],
  defaultLocale: 'en',
})

export default authMiddleware({
  beforeAuth(request) {
    return intlMiddleware(request)
  },

  // Ensure that locale-specific sign in pages are public
  publicRoutes: ['/:locale', '/:locale/sign-in'],
})

export const config = {
  // Match only internationalized pathnames
  matcher: ['/', '/(de|en)/:path*'],
}

Что не работает?

Бог знает что еще. Пока не могу пройти мимо следующего:

  • Защита не работает (пустая страница, ошибок нет: ссылка на локальный хост для входа )
  • Теги клерка не отображаются, например UserButton ничего не генерирует.
  • Та же установка только с Clerk и Next-intl работает хорошо
  • Никаких редиректов на защищенных страницах. / перенаправляется на /en/, но /protected остается включенным /protected (не /en/protected)
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
499
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вам необходимо связать промежуточные программы так, чтобы они выполнялись одно за другим. попробуйте выполнить следующие шаги:

  1. Создайте файл middlewares/middlewarechain.ts в корневом каталоге:
import { NextResponse } from 'next/server'
import type { NextMiddleware } from 'next/server'

type TMiddleware = (middleware: NextMiddleware) => NextMiddleware

export function middlewarechain(
  functions: TMiddleware[],
  index = 0
): NextMiddleware {
  const current = functions[index]

  if (current) {
    const next = chain(functions, index + 1)
    return current(next)
  }

  return () => NextResponse.next()
}
  1. Теперь добавьте приведенный ниже фрагмент кода в файл middleware.ts:

экспортировать промежуточную цепочку по умолчанию ([authMiddleware, intlMiddleware])

не забудьте импортировать функцию middlewarechain в middleware.ts, и вы сможете упорядочивать функции по своему усмотрению.

Большое спасибо за ваш ответ. В Интернете практически нет никакой информации по этой теме (один пример документации и одно устаревшее видео на YouTube, но ни одно из них не бесполезно). Я вернусь к этому на выходных и протестирую. Я предоставлю вам отзыв, как только протестирую.

Alexandr Meyer 12.04.2024 08:41

Большое спасибо за совет. Кажется, вы правы, и цепочка промежуточного программного обеспечения — это решение, но пока мне не удалось заставить его работать. Проблема во мне. Мне нужно это лучше понять. Я обновлю этот пост, как только пойму во всем этом смысл.

Alexandr Meyer 13.04.2024 10:13

так рад это знать, братан, и, пожалуйста, дай мне знать, если тебе понадобится дополнительная помощь..😀

Fakhrul Islam Fuad 13.04.2024 11:16

Я решил проблему с тем, что форма входа не отображается, закомментировав NEXT_PUBLIC_CLERK_SIGN_IN_URL=/sign-in. и NEXT_PUBLIC_CLERK_SIGN_UP_URL=/sign-up в моем .env Никаких изменений в middleware.ts, кроме тех, которые предложены официальной документацией клерка относительно интеграции с next-intl, не потребовалось.

Я мог бы открыть другой вопрос в SO, но я нахожусь в том же положении, что и ОП.

В документации даже есть запись об этом в https://next-intl-docs.vercel.app/docs/routing/middleware#example-integrating-with-clerk

Но с Clerk v5 маршруты /api больше не доступны...

Да, пока я не решил эту проблему. Скоро попробую новую версию Clerk.

Alexandr Meyer 09.05.2024 08:41

Другие вопросы по теме

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

«Отрисовано меньше крючков, чем ожидалось. Это может быть вызвано случайным оператором раннего возврата на вкладках HeadlessUI
Почему я вижу эту ошибку: ответ от обработчика маршрута не возвращается
Конвейер Azure DevOps автоматически создает PAT и прерывает работу
Адаптивное меню не закрывается при повторном нажатии на значок меню. Далее js/React/Tailwind
Где находится журнал сервера для приложения nextjs, работающего в статических веб-приложениях Azure?
Supabase Удалить пользователя из аутентификации, если не удалось создать пользователя в базе данных во время регистрации
Как правильно получить доступ к URL-адресу в nextjs >= 14 с помощью нового App Router?
Мой проект NEXTJS загружает так много модулей, когда я нажимаю ссылку на страницу
Генеративный пользовательский интерфейс Next.js AI SDK с Together AI и Mixtral 8x7B не работает с вызовом функций
Приложение Next.js, созданное с помощью Tauri, не отображает мою страницу 404