2012-01-12 25 views
7

iOS uygulamamla kullanıcı kimlik doğrulaması için Devise çalıştıran Rails 3.1 uygulamasının tümleştirilmesi üzerinde çalışıyorum. Kullanıcının uygulamayı kaydettirmesini isterim ve daha sonra giriş yapmak için bu kimlik bilgilerini saklayabilirim. RestKit kullanmaJSON'da Devise Kullanıcısı Oluştur

, bunu: (tırmık yollarına göre) user_registration POST /users(.:format) {:action=>"create", :controller=>"devise/registrations"}:

-(IBAction)registerUser:(id)sender { 
    NSDictionary *params = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects: 
                   self.email.text, 
                   self.password.text, 
                   self.confirmPassword.text, 
                   nil] 
                 forKeys:[NSArray arrayWithObjects: 
                   @"email", 
                   @"password", 
                   @"password_confirmation", 
                   nil]]; 

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

/users.json url gider. Görüşme çağrısının farklı biçimleri kabul ettiği görülüyor, dolayısıyla JSON'u kabul edeceğini kabul ediyorum. Gönderim isteğim JSON olarak serileştirildi ve gönderildi. Sunucu onu yakalıyor ve bu günlük: Ben bir 422 hatası alıyorum

Started POST "/users.json" for 129.21.84.10 at 2012-01-12 15:33:57 -0500 
    Processing by Devise::RegistrationsController#create as JSON 
    Parameters: {"password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "email"=>"[email protected]"} 
WARNING: Can't verify CSRF token authenticity 
    User Load (0.9ms) SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1 
    (0.3ms) BEGIN 
    (0.2ms) COMMIT 
    (0.2ms) BEGIN 
    (0.4ms) ROLLBACK 
Completed 422 Unprocessable Entity in 93ms (Views: 3.8ms | ActiveRecord: 10.2ms) 

ve benim kullanıcı oluşturulmaz. IOS uygulamamın yanıtı: Response: {"email":["can't be blank"],"password":["can't be blank"]}. Ancak şifre ve e-posta boş değil, sunucu bunları başarıyla aldı. Yani, bir şey doğru çalışmıyor ve nereye gideceğime emin değilim. JSON kullanarak nasıl kullanıcı oluşturabilirim?

Yardımlarınız için teşekkürler!

+0

hiç bu çalışma almak mı? – Quentamia

+0

Hayır, ancak çalışmaya gerek kalmadan devam ettim. Gelecekte buna ihtiyacım olabilir ... –

cevap

5

Kişisel raylar uygulaması bu formda JSON bekliyor:

{"user":{"email":"[email protected]", "password":"Test123", "password_confirmation":"Test123"}} 

Ama varsayılan RestKit tarafından

bu gönderiyor:

{"email":"[email protected]", "password":"Test123", "password_confirmation":"Test123"} 

eklemek için "kullanıcı" Eğer sadece bu gibi rootKeyPath ayarlamanız gerekir :

RKObjectMapping *userSerializationMapping = [userMapping inverseMapping]; 
userSerializationMapping.rootKeyPath = @"user"; 
[[RKObjectManager sharedManager].mappingProvider setSerializationMapping:userSerializationMapping forClass:[User class]]; 
5

Sadece aynı şey kendim üzerinde çalışıyorum - bir iPhone uygulamasından hazırlamak kullanıcı oluşturmak.

{"user":{"email":"[email protected]", "password":"Test123", "password_confirmation":"Test123"}} 

ve URL:

http://localhost:3000/users.json

ve benim yazının istek başlığı Content-Type ise 'uygulaması/bunu şöyle json yayınlayarak bir tedavi çalışan var json'.

Tüm standart Devise yapılandırması.

+2

Burada bir 406 hata kodu alıyorum. – quantumpotato

+1

@quantumpotato garip! Eğer denediniz [bu] (http://stackoverflow.com/questions/3751030/rails-3-returning-a-http-406-not-acceptable) sadece v itibariyle HTML kabul ettiğinden hazırlamak @quantumpotato –

+3

406 atıyor 2.2. burada gösterildiği gibi açıkça JSON kabul edecek şekilde ayarlamak gerekir: https://github.com/plataformatec/devise/wiki/How-To:-Upgrade-to-Devise-2.2 – jesal