node.js - 当我提出邮寄请求时,邮递员挂起。发布请求 注册工作正常,但不能登录
问题描述
所以我正在使用 passportJs JWT 实现基本的登录/注册。我使用的框架是 node.js 的 express。问题是我正在注册一个用户,它工作正常,因为它通过 Postman 注册,我可以在 mongodb shell 中使用db.users.find()
. 但是,当我发出 POST 请求以验证用户身份时,当我将 JSON(应用程序/json)更改为文本时,它会给我“未找到用户”。否则它会挂起并在一段时间后终止。
应用程序.js
const app = express();
const users = require('./routes/users');
//port
const port = 3000;
//middleware
app.use(cors());
//Front
app.use(express.static(path.join(__dirname,'public')));
//middleware
app.use(bodyParser.json());
app.use(passport.initialize());
app.use(passport.session());
require('./config/passport')(passport);
护照.js
module.exports = function(){
let opts = {};
opts.jwtFromRequest = ExtractJwt.fromAuthHeaderWithScheme('jwt');
opts.secretOrKey = 'secret';
passport.use(new JwtStrategy(opts , (jwt_payload, done) => {
User.getUserById(jwt_payload._id, (err, user) =>{
if(err){
return done(err, false);
}
if(user){
return done(null, user);
}
else{
return done(null, false);
}
})
}));
}
用户.js
router.post('/authenticate', (req,res,next) =>{
const email = req.body.email;
const password = req.body.password;
User.getUserByemail(email, (err, user) => {
if(err) throw err;
if(!user){
return res.json({success: false,msg:'user Not Found'});
}
User.comparePassword(password,user.password, (err, isMatch) => {
if(err){
if(isMatch()){
const token = jwt.sign(user,'secret', {
expiresIn: 86400 // 1 Day
});
res.json({
success: true,
token: 'JWT ' +token,
user:{
id: user._id,
name: user.fname+ ' ' + user.lname,
email: user.email
}
});
}
else{
return res.json({success: false,msg:'Wrong Password'});
}
}
});
});
});
用户.js
module.exports.getUserByemail = function(email, callback){
const query = {email: email}
User.findOne(query,callback);
}
解决方案
从我看到的代码来看,护照与您的错误无关,因为您的/authenticate
路线是公开的(不使用护照中间件),因此我们可以将其排除在外。
我建议仔细检查/记录req.body
并查看您是否在 API 函数中获得了正确的信息,我很确定数据是错误的,特别是因为您正在谈论请求格式 text/json。
推荐阅读
- javascript - 将重复出现的 JSON 名称转换为对象?
- elixir - Elixir,我该如何重新排列这个列表?
- php - SQLSTATE[HY000] [1044] 上传到 PhpMyAdmin 数据库表时,用户“@'localhost' 的访问被拒绝
- markdown - 为什么 gatsby-transformer-remark 不将 ID 添加到标题以便我可以链接到它们?
- reactjs - 如果我需要从 fetch 中渲染数据怎么办?
- swagger - 在没有 swagger.json 的情况下使用 OpenAPI/Swagger CodeGen
- laravel - 如何通过多对多关系获取与同一张表相关的行 - Laravel
- javascript - 无法在 Mocha 测试中将 VueX 商店导入路由器和路由器进入商店
- r - 使用 dplyr 在两列中查找重复的字符值
- powershell - 用powershell用字符串替换数字(用双引号括起来)