我一直在研究这个问题已经有一段时间了,并且无法解决我的问题所以我想我会问。我已经在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用户无需通过登录表单登录,也无需创建,更新或删除任何数据。它是严格只读的。任何人都可以把我推向正确的方向吗?
答案 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传递。