授权后重定向登录到模板引擎(把手)

时间:2021-03-23 17:23:40

标签: html node.js mongodb jwt passport.js

我试图在授权后将页面从登录重定向到仪表板,但我无法弄清楚,它仍然向我显示 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.`);
});

0 个答案:

没有答案
相关问题