gpt4 book ai didi

javascript - Backbone.js + jsOAuth

转载 作者:数据小太阳 更新时间:2023-10-29 05:08:43 24 4
gpt4 key购买 nike

我正在使用 Backbone.js 构建一个移动应用程序,我需要执行一个双向 OAuth 来连接 REST API。我找到了一个名为 jsOAuth 的图书馆但不确定如何将它与 Backbone 集成。

我应该重写 sync method 吗?包括标题?

如有任何帮助,我们将不胜感激。

最佳答案

我能够在不使用 jsOAuth 的情况下做到这一点。我覆盖了我的模型的 sync 方法来进行 jquery ajax 调用,并在这些调用上设置 beforeSend 属性以根据请求创建 oauth header 。然后,在模型上设置适当的属性(特别是 body 和 url)后,您要做的就是 PUT/POST 是 modelInstance.save(),模型负责 oauth 本身.

以下示例使用 coffeescript。

模型示例:

Backbone.Model.extend

sync: (method, model, options) ->

switch method
when "create"
$.ajax({
url: model.url()
data: model.body
dataType: 'json'
cache: false
type: 'POST'
beforeSend: (xhr, settings) =>
auth = @makeAuthHeader(key, secret, settings.url, 'POST', realm)
xhr.setRequestHeader('Authorization', auth)
xhr.setRequestHeader('Content-Type', 'application/json')
success: (data, textStatus) ->
model.postSuccess(data, textStatus)
error: (e, jqxhr, exception) ->
model.postError(e, jqxhr, exception)
})
when "update"
$.ajax({
url: model.url()
data: model.body

“makeAuthHeader”函数:

makeAuthHeader: (key, secret, encodedurl, method, realm) ->
accessor = {consumerSecret: secret, tokenSecret: ""}
message = {action: encodedurl, method: method, parameters: [["oauth_version", "1.0"],["oauth_consumer_key", key]]}
OAuth.setTimestampAndNonce(message)
OAuth.SignatureMethod.sign(message, accessor)
return OAuth.getAuthorizationHeader(realm, message['parameters'])

我使用的 oauth 模块是 Netflix 在 2008 年创建的模块,您可以找到 here .万一它以某种方式被删除,您可能可以通过谷歌搜索 javascript oauth "This isn't as useful as you might hope" 来找到该文件。该查询可能听起来不像是对该文件的认可,但我发现它是不真实的:该文件非常有用。

其他可能的障碍:

  • 您的模型需要一个 url 函数来返回将请求发送到的 URL。
  • keysecretrealm 被传递到该模型的初始化方法中,因此可以在我的代码中访问如上所示。
  • model.body 是您必须自己设置的属性。它不是主干标准属性。
  • 如果我的示例看起来有点不对劲,那是因为我在这里展示的模型实际上是我专门为进行 oauth 通信而编写的模型。然后我让实际包含数据的模型扩展了这个模型。这就是为什么,例如,ajax 调用的 success 方法调用 model.success() 的原因。如果这个模型是一次性的,ajax 调用的 success 方法实际上会在那里执行成功工作。

关于javascript - Backbone.js + jsOAuth,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7761249/

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