Đượ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 :)
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