- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在这里寻求帮助。任何指针或决议将不胜感激。
我正在构建一个 MERN 身份验证/授权应用程序,在身份验证尝试期间我收到此错误 500:[object SequelizeInstance:users]。
我正在使用 Passport、mysql 数据库和 sequelize。
下面是我的构建细节。
模型
const bcrypt = require("bcrypt");
module.exports = (sequelize, Sequelize) => {
const User = sequelize.define("users", {
username: {
type: Sequelize.STRING,
required: true
},
email: {
type: Sequelize.STRING,
required: true
},
firstname: {
type: Sequelize.STRING,
required: true
},
lastname: {
type: Sequelize.STRING,
required: true
},
password: {
type: Sequelize.STRING,
required: true
}
}, {
hooks: {
beforeCreate: async function (user) {
const salt = await bcrypt.genSaltSync(10);
user.password = await bcrypt.hashSync(user.password, salt);
}
},
instanceMethods: {
validPassword: function (password) {
return bcrypt.compareSync(password, this.password, (err, isMatch) => {
if (err)
return cb(err);
else {
if (!isMatch)
return cb(null, isMatch);
return cb(null, this);
}
});
}
}
});
return User;
};
const config = require("./config/auth.config");
const db = require("./models");
const User = db.user;
const cookieExtractor = req => {
let token = null;
if (req && req.cookies) {
token = req.cookies["access_token"];
}
return token;
}
// authorization
passport.use(new JwtStrategy({
jwtFromRequest: cookieExtractor,
secretOrKey: config.secret
}, (payload, done) => {
User.findByPk({
id: payload.sub
}, (err, user) => {
if (err)
return done(err, false);
if (user)
return done(null, user);
else
return done(null, false);
});
}));
// authenticated local strategy using username and password
passport.use(new LocalStrategy((username, password, done) => {
User.findOne({
where: {
username: username
}
}).then((err, user) => { // something went wrong with database
if (err)
return done(err);
// if no user exist
if (!user)
return done(null, false);
// check if password is correct
user.validPassword(password, (err, isMatch) => {
if (err)
return done(err)
if (!isMatch)
return done(null, false)
return done(null, user)
}).catch(e => done(err))
});
}));
exports.register = (req, res) => {
const {
username,
email,
firstname,
lastname,
password
} = req.body;
User.create({
username: username,
email: email,
firstname: firstname,
lastname: lastname,
password: password
}).then((user) => {
if (req.body.roles) {
Role.findAll({
where: {
name: {
[Op.or]: req.body.roles
}
}
}).then((roles) => {
user.setRoles(roles).then(() => {
res.status(201).json({
message: {
msgBody: "Account successfully created",
msgError: false
}
});
});
});
} else {
user.setRoles([3]).then(() => {
res.status(201).json({
message: {
msgBody: "Account successfully created",
msgError: false
}
});
});
}
}).catch((err) => {
res.status(500).json({
message: {
msgBody: err.message,
msgError: true
}
});
});
};
exports.login = (req, res) => {
if (req.isAuthenticated()) {
const {
id,
username,
} = req.user;
const token = signToken(id);
res.cookie('access_token', token, {
httpOnly: true,
sameSite: true
});
var authorities = [];
user.getRoles().then(roles => {
for (let i = 0; i < roles.length; i++) {
authorities.push("ROLE_" + roles[i].name.toUpperCase());
}
});
res.status(200).json({
isAuthenticated: true,
user: {
username,
roles: authorities
}
});
} else {
User.findOne({
where: {
username: username
}
}),
(err, user) => {
if (err)
res.status(500).json({
message: {
msgBody: "Error has occurred",
msgError: true
}
});
if (user)
res.status(400).json({
message: {
msgBody: "Wrong password!",
msgError: true
}
});
else {
res.status(401).json({
message: {
msgBody: "Please Register",
msgError: true
}
});
}
}
}
}
const controller = require("../controller/auth.controller");
const passport = require('passport')
const requireSignin = passport.authenticate('local', {session: false});
module.exports = function (app) {
app.use(function (req, res, next) {
res.header("Access-Control-Allow-Headers", "access_token, Origin, Content-Type, Accept");
next();
});
app.post("/login", requireSignin, controller.login);
};
最佳答案
我终于能够解决这个问题。
const bcrypt = require("bcrypt");
module.exports = (sequelize, Sequelize) => {
const User = sequelize.define("users", {
username: {
type: Sequelize.STRING,
required: true,
},
email: {
type: Sequelize.STRING,
required: true,
},
firstname: {
type: Sequelize.STRING,
required: true,
},
lastname: {
type: Sequelize.STRING,
required: true,
},
password: {
type: Sequelize.STRING,
required: true,
},
resetPasswordToken: {
type: Sequelize.STRING,
},
resetPasswordExpires: {
type: Sequelize.STRING,
},
});
User.prototype.comparePassword = function comparePassword(candidatePassword, cb) {
bcrypt.compare(candidatePassword, this.password, (err, isMatch) => {
cb(err, isMatch);
});
};
return User;
};
const passport = require("passport");
const LocalStrategy = require("passport-local").Strategy;
const JwtStrategy = require("passport-jwt").Strategy;
const config = require("./config/auth.config");
const db = require("./models");
const User = db.user;
passport.serializeUser((user, done) => {
console.log('serializing user: ', user.id);
done(null, user.id);
});
passport.deserializeUser((id, done) => {
User.findById(id).then((user) => {
done(null, user);
}).catch(done);
});
const cookieExtractor = (req) => {
let token = null;
if (req && req.cookies) {
token = req.cookies["access_token"];
}
return token;
};
// authorization
passport.use(
new JwtStrategy({
jwtFromRequest: cookieExtractor,
secretOrKey: config.secret,
},
(payload, done) => {
User.findOne({
where: {
id: payload.sub,
},
},
(err, user) => {
if (err) return done(err, false);
if (user) return done(null, user);
else return done(null, false);
}
);
}
)
);
// authenticated local strategy using username and password
passport.use(new LocalStrategy({ usernameField: 'username' }, (username, password, done) => {
User.findOne({
where: { username: username},
}).then(( user, err) => {
if(err)
return done(err);
if (!user) {
return done(null, false);
}
user.comparePassword(password, (err, isMatch) => {
if (err) { return done(err); }
if (isMatch) {
return done(null, user);
}
return done(null, false);
});
});
}));
关于mysql - 如何解决错误 500-[object SequelizeInstance :users] mysql Authentication,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62982128/
我遵循了一本名为“Sitepoint Full Stack Javascript with MEAN”的书中的教程,我刚刚完成了第 6 章,应该已经创建了一个带有“数据库”的“服务器”。数据库只不过是
在 Jquery 中,我创建两个数组,一个嵌入另一个数组,就像这样...... arrayOne = [{name:'a',value:1}, {name:'b',value:2}] var arra
这个问题在这里已经有了答案: What is the explanation for these bizarre JavaScript behaviours mentioned in the 'Wa
我被放在别人的代码上,有一个类用作其他组件的基础。当我尝试 ng serve --aot(或 build --prod)时,我得到以下信息。 @Component({ ...,
我正在测试一些代码,并使用数据创建了一个 json 文件。 问题是我在警报中收到“[object Object],[object Object]”。没有数据。 我做错了什么? 这是代码:
我想打印 [object Object],[object Object] 以明智地 "[[{ 'x': '1', 'y': '0' }, { 'x': '2', 'y': '1' }]]"; 在 ja
我有一个功能 View ,我正在尝试以特殊格式的方式输出。但我无法让列表功能正常工作。 我得到的唯一返回是[object Object][object Object] [object Object]
在使用优秀的 Sim.js 和 Three.js 库处理 WebGL 项目时,我偶然发现了下一个问题: 一路走来,它使用了 THREE.Ray 的下一个构造函数: var ray = new THRE
我正在使用 Material UI 进行多重选择。这是我的代码。 {listStates.map(col => (
我的代码使用ajax: $("#keyword").keyup(function() { var keyword = $("#keyword").val(); if (keyword.
我遇到了下一个错误,无法理解如何解决它。 Can't resolve all parameters for AuthenticationService: ([object Object], ?, [o
我正在尝试创建一个显示动态复选框的表单,至少应选中其中一个才能继续。我还需要获取一组选中的复选框。 这是组件的代码: import { Component, OnInit } from '@angul
我正在开发 NodeJs 应用程序,它是博客应用程序。我使用了快速验证器,我尝试在 UI 端使用快速闪存消息将帖子保存在数据库中之前使用闪存消息验证数据,我成功地将数据保存在数据库中,但在提交表单后消
我知道有些人问了同样的问题并得到了解答。我已经查看了所有这些,但仍然无法解决我的问题。我有一个 jquery snipet,它将值发送到处理程序,处理程序处理来自 JS 的值并将数据作为 JSON 数
我继承了一个非常草率的项目,我的任务是解释为什么它不好。我注意到他们在整个代码中都进行了这样的比较 (IQueryable).FirstOrDefault(x => x.Facility == fac
我只是在删除数组中的对象时偶然发现了这一点。 代码如下: friends = []; friends.push( { a: 'Nexus', b: 'Muffi
这两个代码片段有什么区别: object = nil; [object release] 对比 [object release]; object = nil; 哪个是最佳实践? 最佳答案 object
我应该为其他人将从中继承的第一个父对象传递哪个参数,哪个参数更有效 Object.create(Object.prototype) Object.create(Object) Object.creat
我在不同的对象上安排不同的选择器 [self performSelector:@selector(doSmth) withObject:objectA afterDelay:1]; [self per
NSLog(@"%p", &object); 和 NSLog(@"%p", object); 有什么区别? 两者似乎都打印出一个内存地址,但我不确定哪个是对象的实际内存地址。 最佳答案 这就是我喜欢的
我是一名优秀的程序员,十分优秀!