Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在注册时,在数据库中创建用户,但JWT令牌是;“未定义”;在浏览器中检查时_Javascript_Reactjs_Express_Mern_Jwt Auth - Fatal编程技术网

Javascript 在注册时,在数据库中创建用户,但JWT令牌是;“未定义”;在浏览器中检查时

Javascript 在注册时,在数据库中创建用户,但JWT令牌是;“未定义”;在浏览器中检查时,javascript,reactjs,express,mern,jwt-auth,Javascript,Reactjs,Express,Mern,Jwt Auth,我正在尝试注册一个用户,然后在注册后,在浏览器中有一个持续存在的令牌。目前,用户已注册并添加到数据库中,但当我检查时,会话中没有令牌(状态和道具中的令牌:“undefined”),页面也不会重定向到注册页面之外 在控制台中,我的错误是: POST http://localhost:5000/register 404 (Not Found) Error: Request failed with status code 404 at createError (createError.js:16)

我正在尝试注册一个用户,然后在注册后,在浏览器中有一个持续存在的令牌。目前,用户已注册并添加到数据库中,但当我检查时,会话中没有令牌(状态和道具中的令牌:“undefined”),页面也不会重定向到注册页面之外

在控制台中,我的错误是:

POST http://localhost:5000/register 404 (Not Found)

Error: Request failed with status code 404 
at createError (createError.js:16) 
at settle (settle.js:17) 
at XMLHttpRequest.handleLoad (xhr.js:61)
反应

App.js

import React from "react";
import "./style.scss";
import { BrowserRouter, Route, Switch } from "react-router-dom";
import HomePage from "./home_page.js";
import TitlePage from "./title_page.js";
import AboutPage from "./about_page.js";
import BarberPage from "./barbers_page.js";
import ContactPage from "./contact_page.js";
import GalleryPage from "./gallery_page.js";
import LocationPage from "./location_page.js";
import SeminarsTrainingPage from "./seminars_training_page.js";
import ServicesPage from "./services_page.js";
import AppointmentsPage from "./appointments_page.js";
import RegisterPage from "./views/pages/RegisterPage";
import { connect } from "react-redux";

class App extends React.Component {

  state = {
    token: sessionStorage.getItem("token")
  };

  onRegister = token => {
    sessionStorage.setItem("token", token);
    this.setState({ token });
  };

  render() {
    return (
      <>
        <BrowserRouter>
          <div>
            <Route exact path="/home" component={HomePage} />
            <Route exact path="/about" component={AboutPage} />
            <Route exact path="/barbers" component={BarberPage} />
            <Route exact path="/contact" component={ContactPage} />
            <Route exact path="/gallery" component={GalleryPage} />
            <Route exact path="/location" component={LocationPage} />
            <Route exact path="/seminars-training" component={SeminarsTrainingPage} />
            <Route exact path="/services" component={ServicesPage} />
            <Route exact path="/appointments" component={AppointmentsPage} />
            <Route exact path="/titlepage" component={TitlePage} />
            <Route
              exact
              path="/register"
              render={props => {
                return <RegisterPage {...props} onRegister={this.onRegister} />;
              }}
            />
          </div>
        </BrowserRouter>
      </>
    );
  }
}

const mapStateToProps = state => {
  return {
    token: state.auth.token
  };
};

export default connect(mapStateToProps)(App);
auth_routes.js

const express = require("express");
const router = express.Router();
const { celebrate, Joi } = require("celebrate");
const AuthController = require("../controller/auth_controller");

router.post("/register", celebrate({
    body: {
        email: Joi.string().email().required(),
        password: Joi.string().required()
    }
}), AuthController.register);

module.exports = router;
auth_controller.js

const { UserModel } = require('../database/models/User')
const JWTService = require("../services/jwt_service");

function register(req, res, next) {
    const { email, password } = req.body;
    const user = new UserModel({ email });

    UserModel.register(user, password, (err, user) => {
        if (err) {
            return next(new HTTPError(500, err.message));
        }

        const token = JWTService.generateToken(user);

        return res.json({ token });        
    });
}

async function logout(req, res) {
    req.logout()
    res.redirect('/')
}

async function loginNew(req, res) { 
    res.render('pages/login')
}

async function loginCreate(req, res) {
    const token = jwt.sign({ sub: req.user._id }, process.env.SESSION_SECRET)
    res.json(token)
}

module.exports = {
    register,
    logout,
    loginNew,
    loginCreate
}
User.js

const mongoose = require("mongoose");
const Schema = mongoose.Schema;

// Create Schema
const UserSchema = new Schema({
  email: {
    type: String,
    required: true
  },
  password: {
    type: String,
    required: true
  },
});

const UserModel = mongoose.model("user", UserSchema)

module.exports = { UserModel, UserSchema }
jwt_services.js

const JWT = require("jsonwebtoken");
const expiry = "1d";

function generateToken(user) {
    const token = JWT.sign(
        {
            email: user.email
        },
        process.env.SESSION_SECRET,
        {
            subject: user._id.toString(),
            expiresIn: expiry
        }
    );

    return token;
}

module.exports = {
    generateToken
}
server.js

const express = require("express");
const exphbs = require("express-handlebars");
const morgan = require("morgan");
const mongoose = require("mongoose")
const cors = require('cors')

require ("dotenv").config()

const app = express();

app.use(cors({
  origin: process.env.FRONT_END_DOMAIN
}))

app.engine("handlebars", exphbs({defaultLayout: "main"}));
app.set("view engine", "handlebars");

mongoose
  .connect(
    "mongodb://localhost/raw_barbershop",
    { autoIndex: false, useNewUrlParser: true }
  )
  .then(() => console.log("MongoDB successfully connected"))
  .catch(err => console.log(err));

app.use(express.urlencoded({ extended: false }));
app.use(express.json());

const passport = require('./config/passport')

app.use(passport.initialize())
app.use(passport.session())

app.use(morgan("combined"));

app.use(require("./routes"));

app.use(express.static("public"));

app.use(require("./middleware/error_handler_middleware"));

const port = process.env.PORT || 5000;
app.listen(port, () => console.log(`Server up and running on port ${port} !`));

module.exports = app;

在读取数据时,必须使用sessionStorage.setItem和JSON.parse对数据进行JSON.stringify

此外,在mapStateToProps中,您有:

  return {
    token: state.auth.token
  };
};
但您的状态是这样的:
state={token:'value'}


确保您具有相同的结构。

您可以在react端的寄存器中添加代码吗?从react中添加了寄存器页和表单您可以检查then块in寄存器中的
res.data.token
中的内容吗?
const JWT = require("jsonwebtoken");
const expiry = "1d";

function generateToken(user) {
    const token = JWT.sign(
        {
            email: user.email
        },
        process.env.SESSION_SECRET,
        {
            subject: user._id.toString(),
            expiresIn: expiry
        }
    );

    return token;
}

module.exports = {
    generateToken
}
const express = require("express");
const exphbs = require("express-handlebars");
const morgan = require("morgan");
const mongoose = require("mongoose")
const cors = require('cors')

require ("dotenv").config()

const app = express();

app.use(cors({
  origin: process.env.FRONT_END_DOMAIN
}))

app.engine("handlebars", exphbs({defaultLayout: "main"}));
app.set("view engine", "handlebars");

mongoose
  .connect(
    "mongodb://localhost/raw_barbershop",
    { autoIndex: false, useNewUrlParser: true }
  )
  .then(() => console.log("MongoDB successfully connected"))
  .catch(err => console.log(err));

app.use(express.urlencoded({ extended: false }));
app.use(express.json());

const passport = require('./config/passport')

app.use(passport.initialize())
app.use(passport.session())

app.use(morgan("combined"));

app.use(require("./routes"));

app.use(express.static("public"));

app.use(require("./middleware/error_handler_middleware"));

const port = process.env.PORT || 5000;
app.listen(port, () => console.log(`Server up and running on port ${port} !`));

module.exports = app;
  return {
    token: state.auth.token
  };
};