Страница входа React.js не отправляется на страницу профиля

Я пытаюсь создать страницу входа, и она не отправляет пользователя на страницу профиля, когда я вхожу в систему. Это руководство, которому я пытался следовать: https://dev.to/oyedeletemitope/login-authentication-with- реакция-и-фастапи-397b .

Мой код входа

import React from 'react'
import {  useState } from 'react';
import axios from 'axios';
import { fetchToken, setToken } from './Auth'
import { useNavigate } from "react-router";
function Login() {
  
    const navigate = useNavigate();
    const [usernamelog,setUsernamelog]=useState('');
    const [passwordlog,setPasswordlog]=useState('');
    
    const [loginStatus,setLoginStatus]=useState('')
    
    const login=()=>{
      console.info('login clicked')
      
      if ((usernamelog == "") & (passwordlog == "")) {
        return;
      } else {
      
      axios.post('http://localhost:4060/login',{
         
      
          username:usernamelog,
          password:passwordlog,
          
        }).then(function (response) {
          console.info(response.data.token, "response.data.token");
          if (response.data.token) {
            setToken(response.data.token);
            navigate("/profile");
          }
        })
        .catch(function (error) {
          console.info(error, "error");
        });

       }
      };
  
    return (
    <div className='Login' >
          <h2>Login</h2>
         
          <div >
          {fetchToken() ? (
            <p>you are logged in</p>
          ) : (
            <div>
              <form>
                <label >Input Username</label>
                <input
                  type = "text"
                  onChange = {(e) => setUsernamelog(e.target.value)}
                />

                <label >Input Password</label>
                <input
                  type = "text"
                  onChange = {(e) => setPasswordlog(e.target.value)}
                />

                <button onClick = {login}>Login</button>
              </form>
            </div>
          )}
        </div>

     </div>
  )
}

export default Login;

Мой код аутентификации


import { useLocation,Navigate } from "react-router-dom"

export const setToken = (token)=>{

    localStorage.setItem('temitope', token)// make up your own token
}

export const fetchToken = (token)=>{

    return localStorage.getItem('temitope')
}

export function RequireToken({children}){

    let auth = fetchToken()
    let location = useLocation()

    if (!auth){

        return <Navigate to='/' state  = {{from : location}}/>;
    }

    return children;
}
export default fetchToken

Код моего профиля

import { useNavigate } from "react-router";
export default function Profile() {
  const navigate = useNavigate();

  const signOut = () => {
    localStorage.removeItem("temitope");
    navigate("/");
  };

  return (
    <>
      <div style = {{ marginTop: 20, minHeight: 700 }}>
        <h1>Profile page</h1>
        <p>Hello there, welcome to your profile page</p>

        <button onClick = {signOut}>sign out</button>
      </div>
    </>
  );
}

мой основной код приложения

import './App.css';

import * as yup from "yup";
import {userSchema} from './Validations/UserValid'
import { RequireToken } from "./components/Auth";
import {BrowserRouter as Router,Routes,Route} from 'react-router-dom';
import Home from './components/Home'; 
import Login from './components/login';
import Register from './components/register';
import Profile from './components/Profile';
function App() {
 
  
  

  const createUser= async (event) =>{
    event.preventDefault();
    let formData  = {
    firstname: event.target[0]?.value,
    lastname: event.target[1]?.value,
    organization: event.target[2]?.value,
    email: event.target[3]?.value,
    password: event.target[4]?.value,
    };
    const isValid= await userSchema.isValid(formData);
    console.info(isValid);

  };

 
  return (
    <div className = "App">
        <h1>Our Future Reads</h1>
          
        <Router>
        <Routes>
          <Route path  = "/" element = {<Home />}/>
          <Route path  = "/login" element = {<Login/>}/>
          <Route path = "/register" element = {<Register />} />
          <Route
  path = "/profile"
  element = {
    <RequireToken>
      <Profile />
    </RequireToken>
  }
/>
         
        </Routes>
        
      </Router>
          
          
     
    </div>
  );
}

export default App;

и вот мой соответствующий внутренний код

router= APIRouter(tags=["Authentication"])

@router.post('/login')
def login(request:OAuth2PasswordRequestForm = Depends(), db: Session = Depends(database.get_db) ):
    user = db.query(models.User).filter(models.User.email == request.username).first()
    if not user:
         raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail= f"Invalid Credentials")

    if not Hash.verify(user.password, request.password):
        raise HTTPException(status_code=status.HTTP_404_NOT_FOUND,detail= f"Invalid password" )   
    
    
    access_token = token.create_access_token(data = {"sub": user.email})
    return {"access_token": access_token, "token_type": "bearer"}

Я не уверен, что я делаю неправильно. Кажется, я не получаю никаких ошибок, и у меня были небольшие проблемы с пониманием руководства во время аутентификации. Любая помощь будет принята с благодарностью, и я буду рад добавить дополнительную информацию, если кому-то это понадобится.

попробуйте добавить несколько операторов журнала... посмотрите, попадете ли вы в этот случай...

Joran Beasley 28.09.2022 08:51
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
78
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

проверять

  1. Если функция входа работает

  2. Если вызов API работает

  3. Если отправка данных правильная и в правильном формате

  4. Если ответ ожидаемый

  5. это условие работает:

    если (ответ.данные.токен) { setToken (ответ. данные. токен); перейти("/профиль"); }

  6. useNavigate работает.

попробуйте решить шаг за шагом, мы могли бы решить эту проблему.

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