Javascript 在注册时,在数据库中创建用户,但JWT令牌是;“未定义”;在浏览器中检查时
我正在尝试注册一个用户,然后在注册后,在浏览器中有一个持续存在的令牌。目前,用户已注册并添加到数据库中,但当我检查时,会话中没有令牌(状态和道具中的令牌:“undefined”),页面也不会重定向到注册页面之外 在控制台中,我的错误是: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)
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
};
};