2012-01-12 34 views
7

Tôi đang làm việc để tích hợp ứng dụng Rails 3.1 của tôi chạy Devise để xác thực người dùng bằng ứng dụng iOS của tôi. Tôi muốn người dùng có thể đăng ký từ ứng dụng và sau đó tôi có thể lưu trữ các thông tin xác thực đó để đăng nhập sau.Tạo người dùng trong Devise từ JSON

Sử dụng RestKit, tôi làm điều này:

-(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]; 
} 

Url /users.json đi: user_registration POST /users(.:format) {:action=>"create", :controller=>"devise/registrations"} (theo tuyến đường cào). Có vẻ như cuộc gọi bài chấp nhận các định dạng khác nhau, vì vậy tôi cho rằng nó sẽ chấp nhận JSON. Yêu cầu Bài đăng của tôi được đăng theo thứ tự là JSON và được gửi đi. Máy chủ nhận được nó và đây là nhật ký:

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) 

Tôi gặp lỗi 422 và người dùng của tôi không được tạo. Phản hồi mà ứng dụng iOS của tôi nhận được là: Response: {"email":["can't be blank"],"password":["can't be blank"]}. Nhưng mật khẩu và email không trống, máy chủ đã nhận được chúng thành công. Vì vậy, một cái gì đó không làm việc đúng, và tôi không chắc chắn đi đâu. Làm cách nào để tạo người dùng bằng JSON?

Cảm ơn bạn đã trợ giúp!

+0

Bạn đã từng làm việc này chưa? – Quentamia

+0

Không, nhưng tôi đã tiếp tục mà không cần nó hoạt động. Tôi có thể cần nó trong tương lai mặc dù ... –

Trả lời

5

ứng dụng ray của bạn được mong đợi JSON theo hình thức này:

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

Nhưng bởi RestKit mặc định sẽ được gửi tin nhắn này:

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

Để thêm "người sử dụng", bạn chỉ cần thiết lập các rootKeyPath như thế này :

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

Tôi cũng đang tự làm việc tương tự - tạo người dùng trong Devise từ ứng dụng iPhone. Tôi đã có nó làm việc một điều trị bằng cách đăng json trông như thế này:

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

và URL:

http://localhost:3000/users.json

và yêu cầu tiêu đề Content-Type của bài viết của tôi là 'application/json '.

Tất cả cấu hình Devise chuẩn.

+2

Tôi nhận được một mã lỗi 406 ở đây. – quantumpotato

+1

@quantumpotato lạ! Bạn đã thử [this] (http://stackoverflow.com/questions/3751030/rails-3-returning-a-http-406-not-acceptable) –

+3

@quantumpotato Devise đang ném 406 bởi vì nó chỉ chấp nhận HTML dưới dạng v 2.2. Bạn sẽ phải đặt rõ ràng để chấp nhận JSON như được hiển thị ở đây: https://github.com/plataformatec/devise/wiki/How-To:-Upgrade-to-Devise-2.2 – jesal

Các vấn đề liên quan