2012-01-12 6 views
7

iOSアプリケーションとのユーザー認証にDeviseを使用しているRails 3.1アプリを統合する作業を進めています。ユーザーがアプリケーションから登録できるようにしておき、後でログインするためにこれらの資格情報を保存することができます。 RestKitを使用してJSONからDeviseでユーザーを作成

、私はこれを行う:(すくい経路に従って)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がに行きます。ポストコールはさまざまなフォーマットを受け入れているようですので、JSONを受け入れると仮定します。 My PostのリクエストはJSONとしてシリアル化され、送信されます。サーバーはそれを取得し、これはログです:

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) 

私は422エラーが発生し、私のユーザーは作成されません。 iOSアプリケーションが取得する応答は、Response: {"email":["can't be blank"],"password":["can't be blank"]}です。しかし、パスワードと電子メールは空白ではなく、サーバーは正常に取得しました。だから、何かがうまく動作していない、と私はどこに行くか分からない。 JSONを使用してユーザーを作成するにはどうすればよいですか?

ありがとうございます!

+0

これはこれまでに実現しましたか? – Quentamia

+0

いいえ、でも、動かなくても動きました。私は将来的にそれを必要とするかもしれません... –

答えて

5

:「ユーザー」あなたはこのようrootKeyPathを設定する必要がありますを追加するには

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

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

しかし、デフォルトのRestKitではこれを送信しています:

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

iPhoneアプリからDeviseでユーザーを作成することで、同じことをやっています。

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

とURL:

http://localhost:3000/users.json

と私のポストのリクエストヘッダのContent-Typeは「アプリケーション/私はそれがこのようになりますJSONを掲載することにより、御馳走を働いてんですjson '

すべての標準Devise設定。

あなたのレールのアプリは、このフォームでJSONを期待して
+2

ここに406エラーコードがあります。 – quantumpotato

+1

@quantumpotato strange!これを試してみましたか?(http://stackoverflow.com/questions/3751030/rails-3-returning-a-http-406-not-acceptable) –

+3

@quantumpotato Deviseはvの時点でのみHTMLを受け入れるため、406を投げています2.2。 JSONを受け入れるように明示的に設定する必要があります:https://github.com/plataformatec/devise/wiki/How-To:-Upgrade-to-Devise-2.2 – jesal

関連する問題