我试图在授权后将页面从登录重定向到仪表板,但我无法弄清楚,它仍然向我显示 jwt 页面。
有人可以帮我吗?
如果你想测试一下,我已经做了一个虚拟登录。
本地主机:8000/auth/login 电子邮件地址:dummy@testing.com 密码:test123
如果您想查看所有内容,我的存储库是 https://github.com/JulianMason/ssd_final/
控制器 / 下面的授权控制器
const User = require('../models/User')
const connectDB = require('../models/db')
const bcrypt = require('bcryptjs')
const jwt = require('jsonwebtoken')
connectDB();
const register = (req, res, next) => {
bcrypt.hash(req.body.password, 10, function(err, hashedPass) {
if(err) {
res.json({
error: err
})
}
const user = new User ({
name: req.body.name,
userType: req.body.userType,
email: req.body.email,
password: hashedPass
})
user.save()
.then(user => {
res.json({
message: 'New User Successfully Added!'
})
})
.catch(error => {
res.json({
message: 'An error occured :('
})
})
})
}
login = (req, res, next) => {
var email = req.body.email
var password = req.body.password
User.findOne({email:email})
.then (user => {
if(user){
bcrypt.compare(password, user.password, function(err, result){
if(err){
res.json({
error: err
})
}
if(result){
let token = jwt.sign({name: user.name}, 'verySecretValue', {expiresIn: '1h'})
res.json({
message: 'Login successful!',
token
})
} else{
res.json({
message: 'Incorrect email or password'
})
}
})
}else {
res.json({
message: 'User does not exist'
})
}
})
}
module.exports = {
register, login
}
bugeyeController(应用控制器)
const User = require('../models/User')
exports.login = function(req, res) {
res.render("login", {
layout: 'login'
})
}
exports.landing_page = async(req, res) => {
try {
const user = await User.find({ user: req.user.email }).lean();
res.render('dashboardA', {
name: req.user.name,
//coursework
})
} catch(err) {
console.error(err);
res.render('/views/error/500.hbs');
}
}
模型
db.js
const mongoose = require('mongoose');
const dotenv = require('dotenv');
dotenv.config();
const connectDB = async () => {
try {
const conn = await mongoose.connect(process.env.MONGO_URI, {
useNewUrlParser: true,
useUnifiedTopology: true,
useFindAndModify: false
})
console.log(`MongoDB Connected: ${conn.connection.host}`)
} catch (err) {
console.log(err)
process.exit(1)
}
}
module.exports = connectDB;
User.js
const mongoose = require('mongoose')
const userSchema = mongoose.Schema({
name: {
type: String,
required: true
},
userType: {
type: String,
default: 'Admin',
enum: ['Tester', 'Admin']
},
email: {
type: String,
},
password: {
type: String
}
}, {timestamps: true})
const User = mongoose.model('User', userSchema);
module.exports = User
路线
auth.js
const express = require('express')
const router = express.Router();
const AuthController = require('../controllers/AuthController')
router.post('/register', AuthController.register)
router.post('/login', AuthController.login)
module.exports = router
bugeyeRoutes.js
const express = require('express')
const router = express.Router();
const controller = require('../controllers/bugeyeController')
//const { ensureAuth, ensureGuest } = require('../middleware/authenticate');
router.get('/', controller.login)
router.get("/dashboardA", controller.landing_page);
module.exports = router;
Server.js(索引)
const express = require('express')
const dotenv = require('dotenv')
const mongoose = require('mongoose')
const morgan = require('morgan')
const bodyParser = require('body-parser')
const connectDB = require('./models/db.js')
const exphbs = require('express-handlebars')
const path = require('path')
const router = require('./routes/bugeyeRoutes')
//const public = path.join(__dirname, '/public');
const AuthRoute = require('./routes/auth')
const app = express()
// Load config
dotenv.config();
connectDB();
// Logs
if(process.env.NODE_ENV === 'development') {
app.use(morgan('dev'));
}
// Static folder
app.use(express.static(path.join(__dirname, './public/css')));
//app.use(express.static(path.join(__dirname, '/public/')));
//app.use(express.static(path.join(__dirname, 'public')));
app.use(bodyParser.urlencoded({extended: true}))
app.use(bodyParser.json())
app
// Handlebars Helpers
//const { formatDate, select } = require('../helpers/hbs');
// Handlebars
app.engine('.hbs', exphbs({ helpers: {
//formatDate,
//select
}, extname: '.hbs', partialsDir: [ path.join(__dirname, './partials')] }));
app.set('view engine', '.hbs');
const PORT = process.env.PORT || 8000
// Routes
app.use('/auth', AuthRoute)
app.use('/', router)
app.listen(PORT, () => {
console.log(`Server started in ${process.env.NODE_ENV} mode on port ${PORT}. Ctrl^c to quit.`);
});