通常有许多不同的方法可以去进行身份验证,当然不是每一种都是合适的。然而,我会说明使用ionic和Angular.js解决这个问题的一种方法。
首先,我们需要研究一下怎么在后台web服务器处理身份验证。一个通常的方法是通过后台web服务器需要一个用户的token去发送每次的资源请求。获得一个用户的token,客户端会创建一个带有用户名和密码的登录请求,web服务器会去校验用户名和密码是否校验成功,会生成一个用户的token并把它放置在客户端返回的response中
所有从客户端返回的资源请求会需要用户的token放置在HTTP请求header的'Authentication'字段中。用户token会被检查来确认它是否依然是有效的并且是没有过期的。如果用户的token是无效的并且已经过期了,客户端会返回一个HTTP Response的401状态。
在客户端,我们从一次成功的登录中获取了一个用户的Token,我们将他存放在本地以便我们能够在随后的资源请求传递给后台。我们真的没有必要追踪用户的Token是否是过期的。事实上,如果我们的客户端应用察觉到当一个用户需要登录,促使用户登录,然后在登陆成功之后它真的是伟大的,只是在它停止的地方继续像什么都不曾发生一样。听起来很棒,不是吗?所以我们怎样实现 这种使用一种不明显的方式实现这种行为呢?进行一点少量工作和从额外的库和angular的工作方式获取一些帮助,我们就可以完成它。
Witold Szczerba创造了一个极好的组件叫做angular-http-auth它会帮助我们创建一个优雅的解决方案。Angular有一个‘拦截器’的概念。angular-http-auth模块提这个事件了'authService'使用拦截器拦截HTTP请求和response'。如果一个HTTP response返回了401状态,"authService'会广播一个事件表明等了已经准备好了。我们的应用然后就可以监听这个事件并打开一个模拟的登录允许用户进行登录。如果我们登录成功了,我们也会让"authService'知道登录是被允许的。"authService'然后会再次发出早先的HTTP请求并执行成功/错误/最后的处理关联到最原始的请求。这很了不起吧,这也的确是我们所需要的。
所以,让我们使用angular-http-auth库构建一个ionic移动web应用吧。