使用RESTKit和Devise Tokens进行授权

时间:2013-01-10 21:45:31

标签: ruby-on-rails restkit token

iOS新手...我有一个使用token_authenticatable设置的Rails / Devise应用程序。我有一个令牌控制器,在发布有效的电子邮件和密码时返回一个令牌:

URL: http://localhost:3000/tokens.json

Body: email=example@example.com&password=foobar

Response: 
{
  "token": "xyzxyztoken"
}

创建此令牌后,可以访问站点的其他部分,这可以在测试客户端(RESTClient)中使用。我在iOS中使用RESTKit连接了一段时间。

我在AppDelegate.m中创建了我的RKObjectManager:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    RKURL *baseURL = [RKURL URLWithBaseURLString:@"http://localhost:3000"];
    self.objectManager = [RKObjectManager objectManagerWithBaseURL:baseURL];
    self.objectManager.client.baseURL = baseURL;

    return YES;
}

我有一个视图控制器,当你点击一个按钮时,它会调用它:

-(IBAction)btnLoginRegisterTapped:(UIButton*)sender
{
    // get the object manager
    RKObjectManager *objectManager = [RKObjectManager sharedManager];
    objectManager.serializationMIMEType = RKMIMETypeJSON;

    // set mapping
    RKObjectMapping *nameMapping = [RKObjectMapping mappingForClass:[Token class]];
    [nameMapping mapKeyPathsToAttributes:@"token", @"token", nil];
    [objectManager.mappingProvider setMapping:nameMapping forKeyPath:@""];

    // create url
    NSDictionary *queryParams;
    queryParams = [NSDictionary dictionaryWithObjectsAndKeys:@"example@example.com", @"email", @"foobar", @"password", nil];
    RKURL *URL = [RKURL URLWithBaseURL:[objectManager baseURL] resourcePath:@"/tokens.json" queryParameters:queryParams];

    [objectManager loadObjectsAtResourcePath:[NSString stringWithFormat:@"%@?%@", [URL resourcePath], [URL query]] delegate:self];
}

这是我的错误:

2013-01-10 16:32:55.554 MyApp[69314:14003] response code: 404
2013-01-10 16:32:55.555 MyApp[69314:14003] W restkit.network:RKObjectLoader.m:300 Unable to find parser for MIME Type 'text/html'
2013-01-10 16:32:55.555 MyApp[69314:14003] W restkit.network:RKObjectLoader.m:329 Encountered unexpected response with status code: 404 (MIME Type: text/html -> URL: http://localhost:3000/tokens.json?password=foobar&email=example%40example.com -- http://localhost:3000 -- http://localhost:3000)
2013-01-10 16:32:55.556 MyApp[69314:14003] Error: The operation couldn’t be completed. (org.restkit.RestKit.ErrorDomain error 4.)

这可能是一个简单的问题,但我迷失了。我想我一般都不了解iOS的POST。可能需要注意的一件事是在浏览器中查看/tokens.json会返回路由错误,因为我实际上没有这个视图:

No route matches [GET] "/tokens.json"

无论如何,所有这一切都是为了让用户登录并获取存储的令牌,然后使用它来访问rails应用程序中的其他数据。

如果需要进一步澄清,请告诉我。

1 个答案:

答案 0 :(得分:0)

在您的rails应用中,打开config / routes.rb

添加

resources :tokens