Как аутентифицировать пользователя в gatsby

Я следовал учебнику это, чтобы реализовать аутентификацию в моем проекте 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

Можем ли мы взглянуть на ваш src/pages/app.js файл?

etarhan 04.04.2019 14:42

@etarhan Спасибо, я обновил свой вопрос.

Profer 04.04.2019 14:44
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
1 764
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Пути, которые у вас есть в вашем 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

Profer 04.04.2019 15:05

Нет тоже не работает. На самом деле работают только те страницы, которые я определил в своей папке страницы. Он по-прежнему берется из папки pages. Мне нужно отобразить их из приведенной выше маршрутизации

Profer 04.04.2019 15:16
Я предполагаю, что то, что у вас есть в папке ваших страниц, кроме app.js, index.js и 404.js, каким-то образом вызывает проблемы. yes В папке моих страниц есть другие файлы, которые создают маршруты.
Profer 04.04.2019 15:36

Спасибо большое. Думаю, я близок к цели. я твой должник

Profer 04.04.2019 17:40

Привет, это маленькая вещь. Мои маршруты имеют префикс /app, я этого не хочу. Мне нужно только /. Как я могу это сделать?

Profer 05.04.2019 07:17

Привет, этархан. Могу ли я использовать this.props.location в layout файле? Если вы знаете ответ, я подниму вопрос

Profer 11.04.2019 13:04

Спасибо, вот это stackoverflow.com/questions/55631403/…

Profer 11.04.2019 13:26

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