检查用户是否同步进行身份验证

时间:2015-07-01 11:28:35

标签: javascript

我想检查用户是否在我的应用中进行了身份验证。问题是如果我以同步的方式使用它,我不想被JS Lord诅咒。 我理想的是要有一个功能

Api.User.isAuthenticated()

我会像这样跑:

if (Api.User.isAuthenticated())
    {
        Views.renderDashboard()
    }
else
    {
        Views.renderLogin()
    }

现在我将此函数实现为一个承诺,它可以正常工作,但对于检查用户登录状态这样的简单事情看起来过于复杂。

我使用qwest库来发出XHR请求。它返回promises,代码如下:

Api.User.isAuthenticated = function(token)
    {
        return qwest.get('/session', token)
    }

Api.User.isAuthenticated(token)
    .then(function (response) {
        //
    })
    .catch(function (e, response) {
        //
    });

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

如果您的身份验证方法需要异步,则可以尝试使用回调:

Api.User.checkAuthentication = function(token, callback) {
  qwest.get('/session', token).then(function (response) {
    // Check your response here, send true or false to the callback as appropriate
    callback(true);
  })
  .catch(function (e, response) {
    // You should probably notify the user of the error here, that it wasn't
    // just an invalid username/password combo
    callback(false);
  });
}

Api.User.checkAuthentication('token', function (authenticated) {
  if (authenticated) {
    Views.renderDashboard();
  } else {
    Views.renderLogin();
  }
})

这整个方法可以放在一个函数中,比如checkAuth(),可以在需要时调用它。您可以进一步将回调传递给checkAuth,以便在检查用户是否经过身份验证时运行自定义代码。