Javascript 仅使用express basic auth检查授权
我正在尝试检查是否有人在我的链接中为名为Javascript 仅使用express basic auth检查授权,javascript,node.js,express,Javascript,Node.js,Express,我正在尝试检查是否有人在我的链接中为名为'/protected'的特定路径输入了授权用户名和密码示例: 管理员:admin@localhost:8080/受保护 如果此人已输入此信息,则他将进入一个页面,页面上写着“欢迎授权” 如果此人没有像这样输入链接,只需: 本地主机:8080/protected 他将收到一条消息“未授权”以及错误401 这是我提出的代码,但只有当您获得授权时,才会收到消息,否则您不会收到任何消息 router.get('/protected', basicAuth({
'/protected'
的特定路径输入了授权用户名和密码示例:
管理员:admin@localhost:8080/受保护
如果此人已输入此信息,则他将进入一个页面,页面上写着“欢迎授权”
如果此人没有像这样输入链接,只需:
本地主机:8080/protected
他将收到一条消息“未授权”以及错误401
这是我提出的代码,但只有当您获得授权时,才会收到消息,否则您不会收到任何消息
router.get('/protected', basicAuth({
users: {'admin':'admin'}
}),(req,res)=>{
res.send('Welcome, authenticated client');
});
看起来您正在使用
express basic auth
包,默认情况下,当授权被拒绝时,该包不发送响应正文
,若要向未通过授权的请求添加响应正文,您需要将unauthorizedResponse
属性添加到传递给basicAuth
中间件的对象中
要添加通用消息,它可以像字符串一样简单
router.get('/protected', basicAuth({
users: {'admin':'admin'},
unauthorizedResponse: 'not authorized'
}),(req,res)=>{
res.send('Welcome, authenticated client');
});
要添加动态消息,可以使用函数(通过第一个参数可以访问请求对象):
你应该使用中间件:@KahilMa如果答案正确,也请投票。:)
router.get('/protected', basicAuth({
users: {'admin':'admin'},
unauthorizedResponse: getUnauthorizedResponse
}),(req,res)=>{
res.send('Welcome, authenticated client');
});
function getUnauthorizedResponse(req) {
const { user } = req.auth?.user ?? {}
return user ? `invalid credentials for user '${user}'` : 'no credentials provided';
}