Angular 5 无法 PUT 并出现 401 错误
Posted
技术标签:
【中文标题】Angular 5 无法 PUT 并出现 401 错误【英文标题】:Angular 5 Cannot PUT with 401 Errors 【发布时间】:2019-01-01 03:47:59 【问题描述】:我想在我的角度服务和快递路线上使用 PUT 方法更新数据,但它给了我 401 错误。这是我的服务:
//401
makeAdmin(_id)
this.loadToken()
let headers = new Headers()
headers.append('Authorization', this.authToken)
console.log(_id)
headers.append('Content-Type', 'application/json')
return this.http.put(this.baseUri+'users/makeAdmin/'+_id,headers: headers)
.map(res => res.json())
但是当我使用GET
或DELETE
方法时,它可以将数据发送到我的快速路线。这是我的特快路线:
router.put('/makeAdmin/:id',passport.authenticate('jwt', session:false),(req, res, next)=>
console.log(req.params.id)
)
我的浏览器日志错误:
PUT http://localhost:8080/users/makeAdmin/5b57219f1e1be6279c95a5be 401 (未经授权)core.js:1440 错误响应_body:“未经授权”, 状态:401,确定:假,状态文本:“未经授权”,标题: 标头,...
已编辑这是来自 console.log :
响应_body:“未授权”,状态:401,ok:false,statusText: “未经授权”,标头:标头,...标头:标头_headers: 地图(0),_normalizedNames:地图(0)正常:错误状态:401 statusText: “未经授权”类型:2 url: “http://localhost:8080/users/makeAdmin/5b57219f1e1be6279c95a5be” _body : "未经授权" 原型:正文
【问题讨论】:
【参考方案1】:由于您使用的是map
和Headers
而不是HttpHeaders
,我假设您使用的是angular 的旧Http
客户端,而不是新的HttpClient
类。
PUT 方法需要一个主体 (documentation),所以试试这个
return this.http.put(this.baseUri+'users/makeAdmin/'+_id, null, headers: headers)
.map(res => res.json())
如果您不指定null
作为正文,则标头作为正文参数发送,带有实际标头的选项参数留空。
【讨论】:
【参考方案2】:试试:
let headers = new Headers().append('Authorization', this.authToken);
来自 HttpHeaders 文档:一组不可变的 Http 标头,具有延迟解析。
https://angular.io/api/common/http/HttpHeaders
【讨论】:
用户所说的也是正确的。您只是在单行中重写它。 No..headers 是不可变的,我编辑以添加更多信息 我已经改成你的了,但还是给我401回复 随请求一起发送时令牌是否存在或有效? 令牌有效,我检查了本地存储,并尝试重新登录以制作另一个令牌,但仍然是 401。GET 和 DELETE 在这种情况下有效,但 POST 和 PUT 给出我 401。以上是关于Angular 5 无法 PUT 并出现 401 错误的主要内容,如果未能解决你的问题,请参考以下文章
Angular2 中的 Http PUT 到 .NET Core Web API 提供来自预检请求的 http 401 错误
当没有定义 CSRF 时,Angular $resource 查询在 PUT 上获得 401,在定义 CSRF 时在 GET 上获得 404:/
Angular4 ASP.NET Core 1.2 Windows Authentication CORS for PUT 和 POST 给出 401
将 x-auth-token 发送到 Spring Boot 时,Angular 应用程序出现 401 错误,我做错了啥?