gpt4 book ai didi

angularjs - 使用 $resource? 自动提供默认参数?

转载 作者:可可西里 更新时间:2023-11-01 16:24:28 26 4
gpt4 key购买 nike

我正在创建一个简单的 AngularJS 应用程序,它在提供的 REST API 上使用 Alfresco 作为后端.

首先,通过返回 token (alf_ticket) 的相应服务执行身份验证,并且在身份验证成功后,该 token 必须作为后续请求中的 URL 参数发送。

就我而言,Alfresco REST API 不支持接收 token 作为 HTTP header 的一部分;不过那将是最好的选择,因为通过配置 $http 默认值来解决问题会很简单,仅举一个我能想到的选项。

在这种场景下,恐怕只能将每次请求中的alf_ticket token 作为参数发送到后端,例如:

GET /alfresco/s/api/people/admin/preferences?alf_ticket=TICKET_f79aa9eb2f839cefd1e1c7e4f579379ec06c33ed

我知道 $resource为默认参数提供一种机制,但这些是每个 $resource 实例的特定默认值。

到目前为止,我一直在考虑以下方法:

  1. 为每个 $resource 实例使用参数化 URL(例如 /alfresco/s/api/people/admin/preferences:alf_ticket);然后通过 parameterDefault 提供从当前 session 数据中获取 token 的适当函数。
  2. 类似于 this blog post 中描述的方法, 最初的灵感来自另一个 Stackoverflow question .但我发现它有点干扰,所以我可能会选择选项 1。

理想情况下,我会为 $resource 寻找全局配置或 $http ,类似于您可以配置默认 header 的方式 ($httpProvider.defaults.headers),但恐怕这两种服务均未提供此类功能...

最佳答案

使用 $http 拦截器。

创建一个工厂函数,重新配置对任何 URL 的请求,仅在设置时将身份验证 token 添加到参数中:

app.factory('httpRequestInterceptor', function (Auth) {
return {
request: function (config) {
if (Auth.token) {
config.url = URI(config.url).addSearch({'_auth_token':Auth.token}).toString();
}
return config;
}
};
})

(请注意,我使用 URI.js 添加参数,因为我在 this blog post 之后设计了我的答案,作者也使用它)

$httpProvider 传递到您的 config block 中,并将您的拦截器服务的名称字符串推送到其 interceptor 数组中:

.config(function ($httpProvider) {
$httpProvider.interceptors.push('httpRequestInterceptor');
})

任何 $http 请求(包括被 $resource 包装的请求)将在浏览器执行它们之前被拦截和修改(如果合适)。

Plunker Demo

关于angularjs - 使用 $resource? 自动提供默认参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23742561/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com