Я следовал учебнику это, чтобы реализовать аутентификацию в моем проекте gatsby. Проблема в том, что я сначала настроил проект, и маршрутизация выполняется из папки pages, а затем я реализовал приведенный выше код авторизации, но он по-прежнему использует маршруты из папки страницы, а не из файла app.js. Может кто-нибудь помочь, как я могу направить свои компоненты из папки app.js вместо использования из папки страницы.
Это мой файл gatsby-nodejs
// Implement the Gatsby API “onCreatePage”. This is
// called after every page is created.
exports.onCreatePage = async ({ page, actions }) => {
const { createPage } = actions
// page.matchPath is a special key that's used for matching pages
// only on the client.
if (page.path.match(/^/app/)) {
page.matchPath = "/app/*"
// Update the page.
createPage(page)
}
}
вот источник/pages.app.js
import React from "react"
import { Router } from "@reach/router"
import Layout from "../components/layout"
import Home from '../components/dashboard/home/container'
import Login from '../components/marketing/home/pulsemetrics'
import { isLoggedIn } from "../services/auth"
console.info('vvvvvvvvvvvvvvvvvvvvv')
const PrivateRoute = ({ component: Component, location, ...rest }) => {
console.info('hjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjiiiiiiiiiiiiiiiiiii')
if (!isLoggedIn() && location.pathname !== `/app/login`) {
// If the user is not logged in, redirect to the login page.
navigate(`/app/login`)
return null
}
return <Component {...rest} />
}
const App = () => (
<Layout>
<Router>
<PrivateRoute path = "/ddddddddddddddddddd" component = {Home} />
<Login path = "/" />
</Router>
</Layout>
)
export default App
@etarhan Спасибо, я обновил свой вопрос.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Пути, которые у вас есть в вашем App.js, должны иметь /app/ перед ними, так как ваша логика PrivateRoute использует это для проверки входа в систему. Кроме того, ваш файл gatsby-node.js на самом деле говорит о том, что для маршрутов, начинающихся с app, он должен создавать новую страницу. У вашего src/pages/app.js есть задача определить, как должны создаваться эти страницы (поскольку они не будут обычными статическими страницами, сгенерированными Гэтсби)
import React from "react"
import { Router } from "@reach/router"
import Layout from "../components/layout"
import Home from '../components/dashboard/home/container'
import Login from '../components/marketing/home/pulsemetrics'
import { isLoggedIn } from "../services/auth"
console.info('vvvvvvvvvvvvvvvvvvvvv')
const PrivateRoute = ({ component: Component, location, ...rest }) => {
console.info('hjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjiiiiiiiiiiiiiiiiiii')
if (!isLoggedIn() && location.pathname !== `/app/login`) {
// If the user is not logged in, redirect to the login page.
navigate(`/app/login`)
return null
}
return <Component {...rest} />
}
const App = () => (
<Layout>
<Router>
<PrivateRoute path = "/app/home" component = {Home} />
<Login path = "/app/login" />
</Router>
</Layout>
)
export default App
Прочтите только клиентские маршруты Gatsby документация для справки или взгляните на этот github проблема
Я попробовал это. Когда я нажимаю /app/home, ничего не отображается. Gatsby.js development 404 page
Нет тоже не работает. На самом деле работают только те страницы, которые я определил в своей папке страницы. Он по-прежнему берется из папки pages. Мне нужно отобразить их из приведенной выше маршрутизации
Спасибо большое. Думаю, я близок к цели. я твой должник
Привет, это маленькая вещь. Мои маршруты имеют префикс /app, я этого не хочу. Мне нужно только /. Как я могу это сделать?
Привет, этархан. Могу ли я использовать this.props.location в layout файле? Если вы знаете ответ, я подниму вопрос
Спасибо, вот это stackoverflow.com/questions/55631403/…
Можем ли мы взглянуть на ваш
src/pages/app.jsфайл?