Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 仅使用express basic auth检查授权_Javascript_Node.js_Express - Fatal编程技术网

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';
}