Ionic 2中Authorization Basic请求头失效问题求助
哎,这种401真的让人头疼——我之前也踩过一模一样的坑!大概率是你设置Authorization头的方式不对,Basic Auth的格式要求很严格,容不得半点差错。我来给你捋清楚:
核心问题:Basic Auth的正确格式
Basic认证的请求头必须严格遵循:Authorization: Basic <Base64编码的"用户名:密码">
这里有两个最容易出错的点:
- 用户名和密码之间必须用冒号
:连接,少了这个冒号服务器根本认不出来 - 拼接后的字符串要做Base64编码,不能直接把明文写进去
修正后的代码示例
你可以直接替换成下面的代码试试:
let username: string = 'username'; let password: string = 'password'; // 1. 按规则拼接用户名和密码(必须带冒号) const authCredentials = `${username}:${password}`; // 2. 对拼接结果做Base64编码(浏览器环境用btoa,Node.js用Buffer) const base64Auth = btoa(authCredentials); // 3. 正确设置请求头 let headers: Headers = new Headers(); headers.append("Accept", 'application/json'); headers.append("Authorization", `Basic ${base64Auth}`);
额外排查点(如果还是不行的话)
- Node.js环境注意:如果是在Node里写的代码,别用
btoa,换成Node的Buffer API:const base64Auth = Buffer.from(authCredentials).toString('base64'); - 特殊字符处理:如果用户名/密码包含特殊字符(比如@、#、中文),直接btoa会报错,得先转义:
const encodedUsername = encodeURIComponent(username); const encodedPassword = encodeURIComponent(password); const authCredentials = `${encodedUsername}:${encodedPassword}`; const base64Auth = btoa(unescape(encodeURIComponent(authCredentials))); - 跨域CORS问题:如果是浏览器端请求跨域接口,得确保后端配置了
Access-Control-Allow-Headers: Authorization,否则浏览器会自动把Authorization头去掉 - 服务器认证机制:最后确认下后端是不是真的用Basic Auth,有些服务器可能用Bearer Token或者自定义认证头,别搞错了机制
内容的提问来源于stack exchange,提问作者ankur kumawat
相关产品推荐
相关产品推荐

