javascript - 如何确定用户是否仍在使用基于 session 的身份验证登录?

标签 javascript angularjs session

我知道这个问题已被问过无数次,但我找到的答案都没有描述与后端的实际连接。

我有一个与小型后端 (Django) API 通信的单页 JS 应用程序。我使用基于 session 的身份验证。用户信息在第一次加载时缓存。如果 session 过期,我需要更改页眉并从缓存中刷新用户信息。但是,我的大部分 API 资源都是公共(public)的,并且始终返回 200。其他一些资源是私有(private)的,如果用户未登录则返回 403,这非常好,因为这为我提供了我需要的信息。问题是,有些页面只能访问公共(public)资源。如果 session 在后端突然被删除并且用户导航到仅访问公共(public)资源的 url,用户信息不会被刷新并且我有一个用户体验问题。

我最初的想法是在每次 url 更改时请求私有(private)用户资源(我们称之为 /users/self/),如果用户通过身份验证则返回 200,如果用户未通过身份验证则返回 403。然而,这需要在每次 url 更改的每个其他请求之前有 1 个额外请求,这并不是很理想。

在这种情况下,我可以使用更简单的技术吗?如果可以解决问题,我什至不介意切换到其他类型的身份验证。

最佳答案

我在这种情况下所做和看到的是使用某种类型的 http 拦截器拦截 Angular 完成的所有 http 请求,如果它发现响应状态为 401,则此类拦截器使用 $rootScope< 引发事件

在这里查看一个图书馆 https://github.com/witoldsz/angular-http-auth

要使用它,需要使用某种类型的根 Controller 订阅引发的事件,这可以将用户重定向到登录页面。

请在此处查看示例 https://medium.com/opinionated-angularjs/7bbf0346acec

关于javascript - 如何确定用户是否仍在使用基于 session 的身份验证登录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23293748/

相关文章:

javascript - E.split 在 jquery 中附加日期作为数据时不是函数错误

javascript - 使用 JS SDK 将照片发布到 Facebook 粉丝页面的相册

angularjs - UI-Router state.go回调状态更改

php - Smarty 终止了我的 session

php - 当前在线访问者逻辑在 PHP 中

javascript - 对象的值未定义

javascript - 使用 Dojo 禁用 DIV 中的所有小部件

javascript - Angular 不渲染模板主要和常见的是什么

angularjs - 防止 $rootScope.$on 多次调用函数

java - 处理请求时 Tomcat session 超时