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())

但是当我使用GETDELETE 方法时,它可以将数据发送到我的快速路线。这是我的特快路线:

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】:

由于您使用的是mapHeaders 而不是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 错误,我做错了啥?

向 Spotify API 发出 PUT 请求时出现 401 错误

如何处理 spring security + angular 中的 401 错误?