1

我有一个基于 Rails 4 的 API,它使用 Devise 进行身份验证,并且需要user_tokenuser_email每个 api 调用进行身份验证。发送的凭据基于当时使用该应用程序的用户。

我正在为我的前端使用 Spine.js,并希望获得一些建议,了解将这些附加参数包含到客户端进行的每个 AJAX 调用中的最佳方法。

在 Spine 中,我有一个 Session 模型,它在用户登录时将我的 API 返回的所需详细信息持久化(到本地存储)。

我想到了几种方法……</p>

通过@url 属性,但我需要修复它以在每个模型中工作,就像这样......</p>

class User extends Spine.Model
  @configure 'User', 'name', 'email', 'image_url' 
  @extend Spine.Model.Ajax

  @url: '#{Spine.model.host}/users/?user_token=foo&user_email=bar'

…也许更合适的方法是创建一个扩展该@url方法并每次附加这些参数的基本模型。然后,我的每个其他模型都可以从这个基本模型继承来稍微干燥一下。

与上面类似,我可以扩展我使用的每个模型函数,以在每次进行 API 调用时附加这些附加参数。例如,我可以看看扩展@fetch()功能。像这样的……</p>

class User extends Spine.Model
  @configure 'User', 'name', 'email', 'image_url'
  @extend Spine.Model.Ajax

  @fetch (params) ->
    params or= 
      data: {user_token: 'foo', user_email: 'bar'}
      processData: true

    super(params)

或者我的第三个想法是我是否可以扩展Spine.Model.Ajax以将我的附加参数附加到每个 api 调用的末尾,将它完全从模型中抽象出来,所以我不需要扩展任何模型函数甚至使用@url属性,因为默认情况下它按我的需要工作,除了我需要发送的这些额外凭据。

或者,我的方法可能完全错误,我可能忽略了一些更简单的事情(我希望如此)。

免责声明:我没有测试任何上述代码,只是在我的思考过程中记下它。

我的一个 HTTP 调用的示例(暂时在 dev 中)是:http://dev.myapp.com:5000/api/v1/posts?user_token=foobar&user_email=foo@bar.com

4

1 回答 1

1

我使用前几天偶然发现的 jQuery $.ajaxSetup()函数解决了这个问题。我的代码如下所示:

settings =
        data:
          user_email:'foo@bar.com'
          user_token:'foobar'

$.ajaxSetup settings

我已将此绑定到 Spine 中我的 Session 模型上的“创建”事件,因此一旦将 Session 保存到本地存储,它就会被调用。这样,我正在进行的 AJAX 调用都附加了我需要发送的其他数据参数。

于 2013-09-27T13:04:17.043 回答