为什么我的 API 在使用 JWT 后不再工作了?
Why my API is not working anymor after using JWT?
我正在为我的前端应用程序创建一个 API 后端。在 Postman 中测试 GET 和 POST 请求时一切正常。但是在我尝试确保它安全之后它就不再工作了,请求是 运行、运行... 和 return 什么都没有,甚至没有错误消息。
我创建了一个 jwt.js:
const expressJwt = require('express-jwt');
// creating the function
const authJwt = () => {
// use the secret
const secret = process.env.secret_key;
// returning expressJwt to use the secret and the algorithms
return expressJwt({
secret,
algorithms: ['HS256']
})
}
module.exports = authJwt;
我用以下内容更新了我的 index.js:
const authJwt = require('./helpers/jwt');
app.use(authJwt);
我按如下方式创建获取请求:
// getting the list of users
router.get(`/`, async (req, res) =>{
const userList = await User.find().select('-passwordHash');
if(!userList) {
res.status(500).json({success: false})
}
return res.status(200).send(userList)
})
最后,我创建了 post 登录请求:
// login the user api
router.post(`/login`, async (req, res) => {
const { email, password } = req.body;
const user = await User.findOne({ email });
if (!user)
return res.status(404).send({ message: 'User was not found' })
if (user && bcrypt.compareSync(password, user.passwordHash)) {
const secret = process.env.secret_key
const token = jwt.sign(
{
userId: user.id,
},
secret,
{ expiresIn: '1d' }
)
return res.status(200).send({ user: user.email, token: token })
} else {
return res.status(404).send({ message: 'Wrong email or password' })
}
})
您正在定义函数 authJwt 但从未调用它。
改变
app.use(authJwt);
到
app.use(authJwt());
之前你只是传递它,现在你调用它,返回 expressJWT 中间件。
我正在为我的前端应用程序创建一个 API 后端。在 Postman 中测试 GET 和 POST 请求时一切正常。但是在我尝试确保它安全之后它就不再工作了,请求是 运行、运行... 和 return 什么都没有,甚至没有错误消息。 我创建了一个 jwt.js:
const expressJwt = require('express-jwt');
// creating the function
const authJwt = () => {
// use the secret
const secret = process.env.secret_key;
// returning expressJwt to use the secret and the algorithms
return expressJwt({
secret,
algorithms: ['HS256']
})
}
module.exports = authJwt;
我用以下内容更新了我的 index.js:
const authJwt = require('./helpers/jwt');
app.use(authJwt);
我按如下方式创建获取请求:
// getting the list of users
router.get(`/`, async (req, res) =>{
const userList = await User.find().select('-passwordHash');
if(!userList) {
res.status(500).json({success: false})
}
return res.status(200).send(userList)
})
最后,我创建了 post 登录请求:
// login the user api
router.post(`/login`, async (req, res) => {
const { email, password } = req.body;
const user = await User.findOne({ email });
if (!user)
return res.status(404).send({ message: 'User was not found' })
if (user && bcrypt.compareSync(password, user.passwordHash)) {
const secret = process.env.secret_key
const token = jwt.sign(
{
userId: user.id,
},
secret,
{ expiresIn: '1d' }
)
return res.status(200).send({ user: user.email, token: token })
} else {
return res.status(404).send({ message: 'Wrong email or password' })
}
})
您正在定义函数 authJwt 但从未调用它。
改变
app.use(authJwt);
到
app.use(authJwt());
之前你只是传递它,现在你调用它,返回 expressJWT 中间件。