AngularJS - 重定向到登录页面并保留会话 ID

2023-12-29

我正在寻找一种方法来完成这两件事,首先,如果没有找到 SessionID,我想将用户重定向到登录页面;其次,我想听听您对仅将会话 ID 保留在内存中(没有 cookie)的意见。

我针对重定向提出的解决方案是:

1 - 创建一个名为 OAuth 的服务,该服务将检查 SessionID 是否存在,如果不存在,则重定向到登录页面,该服务还负责登录和注销方法。

app.factory('OAuth', ['$http', function ($http) {

    var _SessionID = '';

    return { 
        login: function () {
            //Do login ans store sessionID in var _SessionID
        },

        logout: function () {
            //Do logout
        },

        isLoggedIn: function () {
            if(_SessionID) {
                return true;
            }
            //redirect to login page if false
        }
    };

}]);

2 - 在每个控制器中注入新的 OAuth 服务并检查用户是否已登录

app.controller('myCtrl', ['$scope', 'OAuth', function ($scope, OAuth) {

    //check if user is logged
    OAuth.isLoggedIn();

}]);

问题:

1 - isLoggedIn() 方法将在所有控制器中调用,所以我想知道是否有一种方法可以做到这一点,而不必注入服务并在每个控制器中调用它。

2 - 我不想使用 cookie 来存储 sessionID,而是将其保存在 OAuth 的 _SessionID 变量中,并针对每个请求将其发送到服务器。这是一种可行/安全的方法吗?你能给我一些想法吗?

Thanks!


我使用类似的策略(拦截来自服务器的 401 响应)。您可以在此处查看完整示例:https://github.com/Khelldar/Angular-Express-Train-Seed https://github.com/Khelldar/Angular-Express-Train-Seed

它在后端使用 Node 和 mobgodb 来存储会话,并在客户端上使用一个精简的 http 拦截器,该拦截器不会像上面链接的 Dan 那样重试请求:

 var interceptor = ['$q', '$location', '$rootScope', function ($q, $location, $rootScope) {
        function success(response) {
            return response;
        }

        function error(response) {
            var status = response.status;
            if (status == 401) {
                $location.path('/login');
            }
            return $q.reject(response);
        }

        return function (promise) {
            return promise.then(success, error);
        }
    }];
    $httpProvider.responseInterceptors.push(interceptor);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AngularJS - 重定向到登录页面并保留会话 ID 的相关文章

随机推荐

  • Postgres表列名限制?

    我在 psql 中这样做了 CREATE TABLE IF NOT EXISTS apiss skey TEXT time INTEGER user TEXT ip TEXT I get ERROR syntax error at or n
  • 无法找到 Spring NamespaceHandler 错误

    我已经遇到这个错误近一周了 我正准备屈服 我已经使用 Maven2 来制作大 jar 文件 当我使用以下命令运行 jar 文件时 java jar someJar jar 我收到此错误 ERROR 27 55 13 10 55 Launch
  • 如何将 numpy 数组从某一行开始写入 .txt 文件?

    我需要将 3 个 numpy 数组写入 txt 文件 文件头看起来像这样 Filexy time operation1 operation2 numpy 数组如下所示 time np array 0 60 120 180 operation
  • 拦截 SimpleCursorAdapter 操作

    我正在编写一个应用程序 它使用 SimpleCursorAdapter 来显示 SQLite 数据库中的项目列表 该应用程序是一个列表应用程序 它允许用户创建项目列表 数据库中有一个字段用于跟踪用户是否希望列表项的文本被划掉 基本上 我想拦
  • 对 Visual Studio 2012 VSIX 扩展进行数字签名

    我正在尝试签署一份Visual Studio 2012 extension被封装为VSIX file 我已按照以下说明进行操作http www jeff wilcox name 2010 03 vsixcodesigning http ww
  • 将 Google Play 服务添加到 Eclipse 项目

    我已经红了好几个了posts https stackoverflow com questions 14230808 google map android api v2 crashed和文章 但它对我不起作用 我无法在我的项目中添加 使用 G
  • 如何编辑现有的 VS 代码片段

    有没有办法删除或编辑 Visual Studio CODE 中的一些默认代码片段 例如 当我输入 req TAB 我需要require not requestAnimationFrame 扩展片段可以在下面的每个片段目录中找到 如果扩展中有
  • 如何使用 angularjs 检测浏览器?

    我是 AngularJS 的新手 如何在 angularjs 中检测 userAgent 可以在控制器中使用它吗 尝试了类似下面的东西 但没有运气 var browserVersion int msie d exec lowercase n
  • 在 Actionscript 3 项目中显示 HTML

    Folks 我出于 SEO 目的从 Drupal 后端提取所有 Flash 纯 AS3 项目 而不是 Flash CS3 内容 这非常有效 只是 TextField 对象中内置的 HTML 渲染还有很多不足之处 谁能推荐一些允许我显示 HT
  • 以编程方式更改 Eclipse 中的背景颜色

    我有一个关于 eclipse 插件开发的问题 有什么办法吗 通过它我可以以编程方式更改 Eclipse 中的背景颜色 我可以通过调用更改文本前景色 ITextViewer 中的 setTextColor 颜色 偏移量 长度 controlR
  • 按 Ctrl+C 后,如何让 Python 在程序停止之前完成作业?

    我有 4 个这样的工作的无限循环 list1 while 1 try job1 a B job2 c a accd job3 d len c job4 list1 append d except KeyboardInterrupt save
  • word2vec - KeyError:“单词 X 不在词汇表中”

    使用Word2Vec模块的实现gensim为了为我在纯文本文件中拥有的句子构建单词嵌入 尽管这个词happy在词汇表中定义 得到错误KeyError word happy not in vocabulary 尝试将给出的答案应用到类似的问题
  • 为什么建议避免使用 .innerHTML?

    抱歉 我是 JavaScript 菜鸟 但是谁能解释一下为什么建议不要使用 innerHTML 当我们有更快 更容易的东西时 innerHTML 为什么我们不应该使用它 innerHTML是一把大锤 它将清除所选 DOM 元素的内容 并用当
  • C# - 外键引用无效表 - 基本迁移不起作用

    尝试用 C 制作我的第一个项目 然而 到目前为止 这非常令人沮丧 这是一个我无法解决的问题 因为我看不出有什么问题 我试图在我的数据库中进行简单的迁移 用户迁移文件 public override void Up CreateTable d
  • 为什么 ServiceWorker 无法访问 Cookie

    据我所知服务人员无法访问 cookie 因此 我在为我的网站实施软件时面临很多问题 我想知道是什么原因服务人员无法访问 cookie 现在我正在使用消息传递将 cookie 内容传达给服务人员 有没有更好的方法或技巧可以更有效地做到这一点
  • 什么时候提交 FragmentTransaction 是安全的?

    根据docs https developer android com reference android app FragmentManager html 片段事务只能在事务之前创建 提交 保存其状态的活动 如果您尝试在之后提交交易 Act
  • React Router BrowserRouter 在不通过主页点击直接进入子页面时会导致“404 Not Found - nginx”错误

    我正在使用 React Router 为多页面网站进行路由 当尝试直接进入子页面时https test0809 herokuapp com signin https test0809 herokuapp com signin您会收到 404
  • 需要持续时间的输入类型

    我需要询问用户 html 输入的持续时间 FE 03小时12米12秒 有什么办法给他一个选择 比如输入类型日期 我使用 Bootstrap 4 谢谢
  • 前置输入标签 (simple_form + bootstrap-sass) 偏离几个像素

    我想使用此处显示的文本输入字段 http simple form b ootstrap plataformatec com br articles new http simple form bootstrap plataformatec c
  • AngularJS - 重定向到登录页面并保留会话 ID

    我正在寻找一种方法来完成这两件事 首先 如果没有找到 SessionID 我想将用户重定向到登录页面 其次 我想听听您对仅将会话 ID 保留在内存中 没有 cookie 的意见 我针对重定向提出的解决方案是 1 创建一个名为 OAuth 的