Как аутентифицировать пользователя в гэтсби - PullRequest
1 голос
/ 04 апреля 2019

Я следовал этому руководству по внедрению аутентификации в моем gatsby проекте. Проблема в том, что я сначала настроил проект, и маршрутизация производится из папки pages, а затем я реализовал вышеуказанный код авторизации, но он по-прежнему берет маршруты из папки pages , а не из * Файл 1009 * app.js . Может кто-нибудь, пожалуйста, помогите, как я могу направить мои компоненты из app.js вместо использования из папки pages .

Это мой файл 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)
  }
}

здесь 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.log('vvvvvvvvvvvvvvvvvvvvv')

const PrivateRoute = ({ component: Component, location, ...rest }) => {
    console.log('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

1 Ответ

2 голосов
/ 04 апреля 2019

Пути, которые у вас есть в вашем App.js, должны иметь / app / prepended перед ними, так как ваша логика PrivateRoute использует это для проверки входа в систему. Кроме того, на самом деле ваш файл gatsby-node.js говорит о том, что для маршрутов, начинающихся с приложения, необходимо создать новую страницу. Ваш src / pages / app.js имеет задачу определить, как эти страницы должны создаваться (так как они не будут обычными сгенерированными статическими страницами от gatsby)

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.log('vvvvvvvvvvvvvvvvvvvvv')

const PrivateRoute = ({ component: Component, location, ...rest }) => {
    console.log('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 выпуск

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...