【发布时间】:2014-06-27 22:56:36
【问题描述】:
我正在使用带有基于令牌的身份验证的 AngularJS,并且想知道您对通过将令牌附加到标头请求来为用户维护持久“会话”的最佳实践有何看法。让我描述一下我遇到的问题:
现在是这样设置的,但稍微简化了一点:
- 用户登录
- 后端返回包含令牌的用户对象,用户被视为已登录,令牌保存在本地存储中
- 用户刷新页面,加载页面并初始化 angular,没有返回用户对象和令牌,并且用户暂时不被视为已登录,因为没有令牌自动附加到用户的请求中
- 现在,一旦初始化 Angular,它就会检查本地存储中是否存在令牌,如果发现使用 httpInterceptor 向后端发出带有令牌附加到请求的 GET 请求,返回令牌并刷新令牌的用户对象,用户再次视为已登录
我想知道的是如何避免用户在第 4 步中退出的瞬间闪现。使用基于 cookie 的身份验证,这是可能的,因为 cookie 会自动附加到每个请求,因此我的后端可以在 cookie 返回之前反序列化它一个渲染模板作为响应,并在脚本标签内以 json 格式将用户对象附加到该渲染模板,然后 angular 可以在初始化时访问和加载,不会造成延迟。
token 的问题在于,虽然它存在于客户端的 localStorage 中,但在页面刷新时它不会自动附加到请求中。仅当用户在 Angular 初始化之后发出 http 请求并且它已经加载了它的 httpInterceptor 时才附加它,该 httpInterceptor 附加了这个包含令牌的额外标头字段。
所以是否可以始终自动将存储在 localStorage 中的令牌附加到每个请求的标头,或者我目前的方法是否尽可能好。我想我可以将令牌存储在 cookie 中,但这确实会破坏我认为基于令牌的身份验证的目的。
我是不是在错误地处理这个问题?
【问题讨论】:
标签: javascript angularjs authentication token access-token