使用Rails应用程序验证iPhone应用程序

时间:2013-08-01 02:59:13

标签: iphone ios ruby-on-rails devise restkit

我一直在研究这个问题已经有一段时间了,并且无法解决我的问题所以我想我会问。我已经在stackoverflow和其他文章中搜索了其他问题,但它们似乎并没有让我朝着正确的方向前进。

这是我想要做的。我有一个Rails 3应用程序,它只提供JSON格式的数据。数据将仅由1个用户输入,因此对其的访问将非常有限。我正在使用Devise,以便通过身份验证进行保护。

我还有一个可以访问这些数据的iPhone应用程序。由于Rails 3应用程序具有用户名/密码保护,因此iPhone应用程序需要一种方法来对应用程序进行身份验证。

我已经在Devise中查看了令牌身份验证,但似乎无法让它工作。我有一个加载符号,它只是旋转,不会返回任何数据。我还看了http基本身份验证。再一次,没有运气。在iPhone方面,我使用的是ASIHTTPRequest。以下是我通过真实性令牌发布的内容:

//the url variable below is defined in my code but I did not paste that part
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setPostValue:@"auth token" forKey:@"authenticity_token"];
[request addRequestHeader:@"Content-Type" value:@"application/json"];
[request setDelegate:self];
[request startAsynchronous];

当我尝试使用http基本身份验证时,我传递了一个用户名和密码,但由于同样的问题并没有返回数据,因此无效。我确信我遗失了一些东西,但是找不到我需要的信息才能使这个工作。我看了看RestKit,但它似乎还有更多我需要的东西。

我只需要iPhone应用程序来访问JSON数据,它在Rails 3端受到保护。 iPhone用户无需通过登录表单登录,也无需创建,更新或删除任何数据。它是严格只读的。任何人都可以把我推向正确的方向吗?

1 个答案:

答案 0 :(得分:0)

最简单的方法是使用基本身份验证

在你的api /应用程序控制器的rails侧添加

 before_filter :check_auth


  def check_auth
    authenticate_or_request_with_http_basic do |username,password|
      resource = User.find_by_email(username)
      if resource.valid_password?(password)
        sign_in :user, resource
      end
    end
  end

在iOS端,您应该在请求对象上设置Authorization标头:

ASIHTTP开箱即用。好运。

[request setUsername:@"username"];
[request setPassword:@"password"];

或者您可以将它们添加到您的请求的URI中。

NSURL *url = [NSURL URLWithString:@"http://username:password@allseeing-i.com/top_secret/"];

这将允许使用基本身份验证登录,并且其他控制器将从会话中获取您的用户

然后在ios端,您可以像使用任何基本身份验证系统一样传递凭据。

我建议在制作中使用SSL / HTTPS,或者凭据将以纯文本或base64传递。