使用visionmedia / superagent处理401未经授权的回复

时间:2017-01-29 00:13:48

标签: javascript superagent

背景

我使用visionmedia / superagent访问我的REST API。该API目前在不同的域上可用,并且具有CORS设置以允许来自我的客户端的跨域请求。为了安全地访问API,我传递了一个带有访问令牌的Authorization标头。令牌的生命周期很短,当它到期时,我可以使用刷新令牌请求新的令牌。当访问令牌过期时,服务器将回复401错误,告诉我该请求是未授权的。

问题

我试图用superagent捕获401 Unauthorized请求,然后处理令牌刷新。问题是superagent没有为401返回标准响应或错误。我得到一个字符串响应而不是一个对象。

错误回复

Error: Request has been terminated
Possible causes: the network is offline, Origin is not allowed by Access-Control-Allow-Origin, the page is being unloaded, etc.
at Request.crossDomainError (client.js:616)
at XMLHttpRequest.xhr.onreadystatechange (client.js:724)

拨打

ajax.get(api.baseURL + '/some_request)
    .accept('application/json')
    .set('Content-Type', 'application/json')
    .set('Authorization', 'Bearer ' + this.getAccessToken())

    .send({...})

    .then((sucess) => {
        //handle success, update data
    })

    .catch((error) => {
        //handle error, if 401 refresh the token and try again.
    });

其他信息

服务器成功处理CORS端的事情,初始OPTIONS请求成功返回200。

我尝试使用非ES6 .end((error, response) => {...}方法来处理具有相同结果的响应。

我使用的是superagent版本" 3.4.0"

我试过捕获错误事件,得到相同的错误字符串。

.on('response', (error, response) => {
    //manage error
})

.on('error', function(err) {
    //manage error
})

我的服务器401响应有一个json响应正文,并返回Content-Type:application/json; charset=UTF-8标题

{ 
  "name":"Unauthorized",
  "message":"You are requesting with an invalid credential.",
  "code":0,
  "status":401,
  "type":"yii\\web\\UnauthorizedHttpException"
}

问题

要获取401响应的错误对象,我需要做什么?我希望能够检查error.status以查看它是否为401,以便我可以刷新令牌?

0 个答案:

没有答案