【发布时间】:2020-08-01 04:13:34
【问题描述】:
我正在尝试在布局中插入用户名,我正在使用带有 node 和 express 的 ejs 模板。我尝试了以下方法:
MongoDB模型:
const mongoose = require('mongoose')
const Schema = mongoose.Schema;
var uniqueValidator = require('mongoose-unique-validator')
const bcrypt = require('bcrypt')
const UserSchema = new Schema({
username: {
type: String,
required: [true, 'Please provide username'],
unique: true
},
password: {
type: String,
required: [true, 'Please provide password'],
},
dateRegistered: {
type: Date,
default: new Date()
}
//image: String
});
UserSchema.plugin(uniqueValidator);
//encrypt password
UserSchema.pre('save', function(next) {
const user = this
bcrypt.hash(user.password, 10, (error, hash) => {
user.password = hash
next()
});
});
const User = mongoose.model('User', UserSchema);
module.exports = User
编辑:login.js:
module.exports = (req,res) =>{
res.render('login')
}
编辑:loginUser.js
const bcrypt = require('bcrypt')
const User = require('../models/User')
module.exports = (req, res) => {
const {
username,
password
} = req.body;
User.findOne({
username: username
}, (error, user) => {
if (user) {
bcrypt.compare(password, user.password, (error, same) => {
if (same) {
req.session.userId = user._id
res.redirect('/')
} else {
res.redirect('/auth/login')
}
})
} else {
res.redirect('/auth/login')
}
})
}
编辑:authMiddleware.js:
const User = require('../models/User')
module.exports = (req, res, next) => {
User.findById(req.session.userId, (error, user ) =>{
if(error || !user )
return res.redirect('/auth/login')
next()
})
}
编辑:redirectIfAuthenticatedMiddleware.js
module.exports = (req, res, next) =>{
if(req.session.userId){
return res.redirect('/') // if user logged in, redirect to home page
}
next()
}
编辑:index.js:
const loginController = require('./controllers/login')
const loginUserController = require('./controllers/loginUser')
app.get('/auth/login', redirectIfAuthenticatedMiddleware, loginController)
app.post('/users/login',redirectIfAuthenticatedMiddleware, loginUserController)
navbar.ejs:
<% if(loggedIn) { %>
<p> <%= username %> </p>
<% } %>
结果是一个没有值的空段落 编辑:添加路由,通过控制器管理
【问题讨论】:
标签: javascript html node.js express ejs