【问题标题】:Can I set authorization headers with RequireJS?我可以使用 RequireJS 设置授权标头吗?
【发布时间】:2016-02-12 22:06:32
【问题描述】:

我们希望为使用 RequireJS 进行依赖管理的 AngularJS 应用程序(公共/私有)提供 2 组资源。基本上登录页面上的所有内容都是公开的,一旦登录,将加载另一个 angularjs 应用程序(新的 requirejs 配置),该应用程序将加载需要身份验证才能访问的资源。

有没有办法配置requirejs在加载资源时设置授权头?

【问题讨论】:

    标签: authentication requirejs


    【解决方案1】:

    这取决于您所说的“资源”以及您的服务器是如何配置的。但总的来说 - 是的,因为您使用的是 AngularJS,您可以使用 $httpProvider 来注入拦截器服务。

    例如,在服务中:

            var dependencies = ['$rootScope', 'userService'];
    
            var service = function ($rootScope, userService) {
                return {
                    request: function(config) {
                        var currentUser = userService.getCurrentUser();
                        var access_token = currentUser ? currentUser.access_token : null;
    
                        if(access_token) {
                            config.headers.authorization = access_token;
                        }
                        return config;
                    },
                    responseError: function (response) {
                        if(response.status === 401) {
                            $rootScope.$broadcast('unauthorized');
                        }
                        return response;
                    }
                };
            };
    
            module.factory(name, dependencies.concat(service));
    

    然后,在你配置好你的路由之后,你可以使用:

    $httpProvider.interceptors.push( 'someService');
    

    你可以在这里找到更多关于拦截器的信息:https://docs.angularjs.org/api/ng/service/$http#interceptors


    更新

    您也许可以使用文本插件来尝试接收它,但我看不出保护客户端代码的意义。另外,如果你想使用优化,资源只会放在一个文件中......

     config: {
            text: {
                onXhr: function (xhr, url) {
                   xhr.setRequestHeader('Authorization','Basic ' + token);
                }
            }
        }
    

    参考:custom-xhr-hooks


    另一个更新

    您也可以使用 urlArgs(主要用于缓存失效)而不使用文本插件:

    require.config({
        urlArgs: 'token='+token,
        ...
    )}
    

    【讨论】:

    • 呵呵,我已经在 Angular 中这样做了。我的意思是当 requirejs 从服务器加载一个 javascript 文件时,我可以将身份验证标头与这些 javascript 文件请求一起传递吗?
    • 感谢@Shapeshifter,保护客户端代码可能听起来有点傻,但我们只是保持谨慎。将内容暴露给不需要查看的未经身份验证的用户是没有意义的。
    • 没问题,您也可以考虑使用 urlArgs,它不会触及标题,但您也可以使用它传递令牌或其他东西。如果我的回答适合你,请标记为这样!谢谢@SomethingOn
    猜你喜欢
    • 2021-11-21
    • 2015-12-02
    • 2011-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-07
    • 2016-07-13
    相关资源
    最近更新 更多