Создание приложения для iPhone + приложение Rails + разработка аутентификации

В настоящее время у меня есть приложение rails, использующее Devise, и я могу войти в систему через браузер. Теперь я хочу создать собственное приложение для iPhone, которое использует это приложение rails в качестве бэкэнда. Что бы я хотел:

  • Когда пользователь впервые открывает приложение iOS, ему предоставляется экран входа в систему.
  • Они помещают информацию, и приложение пытается войти в систему. В случае успеха отображается список пользователей приложения rails (на данный момент). В противном случае он говорит о неправильном входе в систему.
  • Затем пользователь может щелкнуть имя пользователя, и он откроет профили пользователя и т. Д. Приложение должно иметь возможность выполнять все операции CRUD, как если бы они находились на самом сайте.

Сейчас я использую Devise и RestKit для приложения для iPhone. Я включил http_auth в моем приложении rails, и я могу установить имя пользователя / пароль и получить ответ со страницы my / users (список моих пользователей в JSON).

Рельсы:

class UsersController < ApplicationController

before_filter :authenticate_user!

def index
    @users = User.all

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @users }
    end
end

end

iPhone (с использованием Restkit):

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    RKClient *client = [RKClient clientWithBaseURL:@"http://192.168.1.105:3000" username:@"xxxx" password:@"xxxx"];

    [[RKClient sharedClient] get:@"/users.json" delegate:self];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (void)request:(RKRequest*)request didFailLoadWithError:(NSError *)error {
    NSLog(@"error");
}

- (void)request:(RKRequest*)request didLoadResponse:(RKResponse*)response {
    NSLog(response.bodyAsString);
}

Я не знаю, что делать дальше и как к этому подойти.

  1. Как мне обрабатывать экран входа в систему? Хорошо, я могу выполнить GET «http: // localhost: 3000», используя базовую аутентификацию http, и получить обратно список пользователей, но как мне проверить правильность ввода учетных данных пользователя? Есть ли способ просто получить ответ «ОК» или «НЕ ОК» для входа в систему?
  2. Как лучше всего взаимодействовать с приложением rails? Можно ли делать такие вещи, как GET / users / 2, с помощью RestKit? Или мне нужно построить какой-то api? Я не знаю, с чего начать что-то подобное.

person sbonkosky    schedule 07.10.2012    source источник
comment
С точки зрения безопасности вы, вероятно, не захотите отправлять учетные данные пользователя в открытом виде через http. По крайней мере, отправьте соленый хеш пароля и попросите сервер выполнить то же самое, сравните результаты.   -  person Jeff    schedule 08.10.2012
comment
Я планировал использовать https при переходе на продакшн. Было бы нормально?   -  person sbonkosky    schedule 08.10.2012
comment
Если вы полностью уверены, что весь производственный трафик проходит через SSL (https), все будет в порядке. Если вам нравится носить пояс и подтяжки, то и то, и другое, тогда, если клиент перенаправляет на http или что-то сумасшедшее, вы все равно защищены.   -  person Jeff    schedule 08.10.2012


Ответы (1)


Почему вы используете базовую HTTP-аутентификацию, если у вас есть разработка? С помощью devise вы можете возвращать ошибки аутентификации в хеш-коде json и отображать их на экране входа в систему.

Создайте свое приложение в классическом стиле REST, и оно будет достаточно удобным как для веб-клиента, так и для мобильного клиента.

Вы также можете попробовать использовать что-то вроде Rabl https://github.com/nesquena/rabl для создания умных API-интерфейсы JSON в вашем приложении Rails.

person Stanislav Mekhonoshin    schedule 08.10.2012
comment
Хм, думаю, я не совсем понимаю, что вы имеете в виду, говоря о возвращении ошибок аутентификации в хеш-коде json и отображении их на экране входа в систему. Я видел, как несколько человек использовали базовую HTTP-аутентификацию в подобных ситуациях. Какой тип настройки аутентификации вы имеете в виду? - person sbonkosky; 08.10.2012
comment
Я имею в виду обычную аутентификацию Devise - person Stanislav Mekhonoshin; 13.12.2012