【问题标题】:Phonegap App communicate with Rails 3 App using authenticationPhonegap App 使用身份验证与 Rails 3 App 通信
【发布时间】:2012-11-29 04:25:03
【问题描述】:

我正在尝试使用 Phonegap 编写一个 iOS 应用程序来与我的 Rails3 应用程序通信。我不知道如何处理身份验证。我在我的 Rails 应用程序中使用 Devise/Warden。

我能够通过 ajax 在我的 iOS 应用程序中成功登录,但随后的调用却给了我“未经授权”。我的 iOS 应用中似乎没有设置会话 cookie。

如何让我的 iOS 应用了解我的 Rails 身份验证会话?

【问题讨论】:

  • 你想到了什么?我也对这个问题的答案感兴趣。

标签: ruby-on-rails cordova devise


【解决方案1】:

答案有两个。

首先我必须在 iOS 应用中将其添加到我的 ajax 请求中:

xhrFields: {
  withCredentials: true
}

如...

$.ajax({
    url: ....,
    type: "GET",
    xhrFields: {
        withCredentials: true
    },
    complete: hideLoader,
    error: function(xhr,txt,err) {
        // you can't get back anyways
        window.location.hash = "";
    },
    success: function(data,status,res) {
        window.location.hash = "";
    }
}); 

其次,我必须将其添加到 Rails 应用程序中的应用程序控制器中:

def protect_against_forgery?
  unless request.format.json?
    super
  end
end

【讨论】:

  • 第一行代码添加在哪里?我知道这是一个将通过 ajax 发送的块,只是不确定它会去哪里......你在使用 phonegap 吗?
  • 第一行添加到ajax请求中。我正在使用phonegap和jquery。我编辑了我的帖子。
  • 谢谢,我支持你。所以看起来你正在覆盖protect_against_forgery以允许请求进入......似乎有点违背了该方法的目的,不是吗?那么这是否允许设置cookie?您使用什么身份验证?设计?
  • 是的,它确实覆盖了对 json 请求的伪造保护。身份验证的工作方式与正常情况相同,它只是使请求重放攻击更容易一些。在这种情况下我并不担心,但如果您担心,那么您的 javascript 必须使用隐藏表单并提取它的伪造保护令牌并将其包含在请求中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-16
  • 2014-04-30
  • 2012-10-10
相关资源
最近更新 更多