2011-01-26 25 views
25

Tôi đã thiết lập xác thực người dùng cho ứng dụng đường ray của tôi với Devise và Omniauth. Bây giờ tôi tự hỏi tôi nên bắt đầu sử dụng cùng một auth cho một ứng dụng Android và iPhone mà tôi muốn tạo.Devise Omniauth và Iphone/Android App

Tôi có nên sử dụng phiên bản di động/auth/facebook hoặc tôi có nên trực tiếp gửi yêu cầu từ ứng dụng không?

Đây là một câu hỏi khá chung chung, nhưng tôi không tìm thấy nơi nào để xem.

EDIT: Tôi vừa thêm Mã thông báo xác thực vào ứng dụng để sử dụng với api RESTful, tôi chỉ thiếu phần Omniauth/Facebook-token.

+0

Tôi có Facebook SDK thiết lập trong ứng dụng Android của tôi nhưng có vẻ như các token tôi lấy lại không giống với cái tôi có trong cơ sở dữ liệu ứng dụng đường ray vì vậy tôi không thể so sánh chúng để xác thực người dùng của mình? – rnaud

Trả lời

36

Được rồi, vì vậy tôi trả lời câu hỏi của riêng tôi.

Nếu bạn sử dụng Facebook SDK, SSO hoạt động khá tốt trên thiết bị, NHƯNG, mã thông báo bạn nhận được không giống với mã bạn sẽ nhận được trên ứng dụng Rails. Rõ ràng Facebook tạo ra các thẻ khác nhau tùy thuộc vào sự hỗ trợ.

Vì vậy, những gì tôi đã làm là: Khi nhận được thẻ trên thiết bị Android, tôi gửi cho đường ray của tôi ứng dụng thông qua url:

http://myapp/check_mobile_login?token=FB_MOBILE_TOKEN 

này sau đó được đánh bắt bằng cách điều khiển ứng dụng của tôi, trong đó sử dụng Mã thông báo với đá quý fb_graph để tìm nạp dữ liệu người dùng. Nếu Token hợp lệ, tôi sẽ nhận được một số thông tin. Sau đó tôi kiểm tra với cơ sở dữ liệu của mình, và nếu tôi tìm thấy cùng một UID, thì người dùng của tôi được xác thực và tôi gửi lại cho anh ta Authentificable_token từ Devise.

Và dự thảo mã:

def check_mobile_login 
     token = params[:token] 

     user = FbGraph::User.me(token) 
     user = user.fetch 

     logged = User.find_by_uid(user.identifier) 

     respond_to do |format| 
      format.html # index.html.erb 
      format.json { render :json => logged.authentication_token } 
     end 
    end 

Nếu ai đã có một giải pháp tốt hơn, tôi sẽ rất vui khi biết rằng :)

+0

Xin chào, tôi đang cố gắng làm điều tương tự và tôi tự hỏi chính xác nơi bạn "sign_in" đưa ra để authentication_token sẽ được tạo bên trong ứng dụng đường ray của bạn? – refaelos

+0

Thêm: token_authenticatable vào khai báo của bạn trong mô hình Người dùng, sau đó mọi người dùng mới sẽ nhận được một "authentication_token" mà bạn có thể sử dụng để đăng nhập với các yêu cầu tiếp theo của mình. – rnaud

+0

có nhưng bạn phải "sign_in" để tạo lại mã thông báo nếu mã hết hạn. bạn cũng phải "sign_in" để người dùng là current_user. – refaelos

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