AngularJS不拦截来自地址栏的直接请求

Nig*_*ems 9 javascript node.js express angularjs

我正在创建一个使用JWT令牌进行身份验证的AngularJS应用程序.使用AngularJS拦截器传递令牌,如下所示.

'request': function(config)
        {
            if (store.get('jwt_token') != null)
            {
                config.headers['x-access-token'] = store.get('jwt_token');
            }
            else
            {
                config.headers['x-access-token'] = '';
            }

            return config;
        }
Run Code Online (Sandbox Code Playgroud)

每当我访问任何/restricted页面时,一切正常.问题是当我/restricted通过在地址栏中直接键入URL(或刷新页面)来访问页面时,AngularJS被规避,因此,拦截器不会拦截请求,并且令牌不会被传递.

我已经搜索了一段时间,我找到了一些解决方案,比如用一段加载AngularJS的代码进行响应然后从那里进行重定向.但是,如果可能的话,我正在寻找一种更简单/更简洁的方法,因为我可能会在这里遗漏一些东西.

我可以通过检查是否来自AngularJS来检测请求是否x-access-token因为我总是传递它(如果用户未经过身份验证,则为空值).

亚历克斯的回答指出了确切的问题,谢谢Alex.

我昨天终于明白了.我使用的解决方案是确保所有请求都来自AngularJS,我有一个受限页面列表,如果有任何请求,我正在调用一个函数来验证和验证服务器端的JWT令牌,如果它是有效的,继续,否则,转到登录页面.关键是确保所有请求都应该转到index.html以确保AngularJS正在处理路由.

这个链接帮助我解决了这个问题.

http://arthur.gonigberg.com/2013/06/29/angularjs-role-based-auth/

Ale*_*lex 3

听起来 Angular 的路由器和服务器端点之间似乎存在混淆。

您可能在浏览应用程序时触发 $http 配置,使用 Angular 路由器跟踪的 URL(工作正常),而 URL/restricted服务器URL。

因此,当你要求任何事情时/restricted,它会将请求直接发送到服务器,而不是通过 Angular 路由器或应用程序。

基本上,您需要在上下文中的 Angular 应用程序中创建路由restricted,初始化时运行 $http 配置。index.html除了( )之外,您永远不应该直接在地址栏中调用服务器端点/

我建议调用一个 Angular 路由,/restricted-area这样当用户点击它时,它将始终使用您拥有的 $http 方法,通过成为专用的 Angular 路由,/restricted通过控制器在内部调用服务器的端点。