API调用返回响应后,如何正确注销已认证的令牌?

时间:2019-02-10 17:25:01

标签: javascript node.js rest asynchronous fetch

我在客户端的click事件上具有以下代码,它会发送请求服务器端节点以获取令牌,然后从外部url响应返回令牌时。它将令牌传递到第二个ajax调用,以调用特定的api路由。

这一切都很好,但是我想从特定的api路由(使用令牌)获得响应后注销令牌。这样,在响应之后,我就没有令牌保持活动状态。

什么是完成此任务的好方法?我当前的解决方案是在给出特定api路由的响应时,将提取请求发送到/ tokenrequest / logout以注销令牌。但不确定这是否是正确或良好的方法。

getdata.addEventListener("click", function(e) { //simple button click to initiate api
  e.preventDefault();
  $.ajax({
    method: "GET",
    url: "/jdeapi",
    error: function(request, status, error) {
      console.log(error);
    }
  }).then(function(data) {
    console.log(JSON.parse(data));
    let rawData = JSON.parse(data);
    var token = rawData.userInfo.token;
    $.ajax({
      method: "POST",
      url: "/sendtojde",
      data: {
        token
      }
    }).then(function(data) {
      console.log(data);
    })
  })
})

令牌请求的节点服务器端代码如下

router.get('/jdeapi', function(req, res) {
  let url = 'https://Aisserver:port/jderest/tokenrequest';
  let data = {
    username: 'username',
    password: 'password',
    deviceName: 'riolivApp'
  }
  fetch(url, {
      credential: 'include',
      method: 'POST',
      body: JSON.stringify(data),
      headers: {
        'Content-Type': 'application/json'
      }
    }).then(response => response.text())
    .then(text => res.json(text));
})

然后在客户端进行第二次ajax调用后,服务器端调用如下以获取特定的api

router.post('/sendtojde', function(req, res) {
  console.log(req.body.token);
  let url = "https://Aisserver:port/jderest/poservice"
  let data = {
    token: req.body.token,
    deviceName: 'riolivApp',
    applicationName: "P4310",
    version: "RMI0001"
  }

  fetch(url, {
      credential: 'include',
      method: 'POST',
      body: JSON.stringify(data),
      headers: {
        'Content-Type': 'application/json'
      }
    }).then(response => response.text())
    .then(text =>
      res.json(text));
})

0 个答案:

没有答案