2012-06-17 34 views
12

Tôi hiện đang xây dựng một ứng dụng iPhone có phụ trợ đường ray. Tôi đang sử dụng chỉ duy nhất của Facebook Đăng nhập đơn (SSO) trên iphone và xác thực các công trình lớn trên kết thúc khách hàng khá tốt. Tôi đang sử dụng dựa trên đường ray làm phần phụ trợ.Xác thực Rails với Access_token từ Facebook

LƯU Ý tôi đã tham khảo ý kiến ​​Design for Facebook authentication in an iOS app that also accesses a secured web service đã

tôi thấy devise rằng có một cái gì đó gọi là token_authenticable mà chủ yếu là "tấm vé" được mô tả trong bước 5 của chủ đề đó. Đây là dòng điện tôi thấy dấu hiệu sử dụng

  1. vào facebook SSO trên điện thoại
  2. người dùng thực hiện một cuộc gọi đến myserver.com/sessions/fb_sso với {access_token: X}
  3. Trên máy chủ kết thúc (tại SessionsController # fb_sso, tôi sẽ gọi API tới facebook bằng access_token
  4. Nếu access_token hợp lệ, hãy kiểm tra xem người dùng có tồn tại trong db hay không. user_id: X, devise_auth_token: Y} quay lại cuộc gọi trên 1)

Điều này khá đơn giản. Tuy nhiên, tôi có một vài câu hỏi:

  1. Với devise_auth_token, điều đó có nghĩa là tôi không còn phải gọi sign_in ("người dùng", tài nguyên) nữa không? (tìm thấy ở đây http://jessewolgamott.com/blog/2012/01/19/the-one-with-a-json-api-login-using-devise/)
  2. Nơi nào sẽ là nơi tốt nhất để đặt mã cho 3-4?
  3. Tôi dường như không tìm thấy nhiều về Google về chủ đề này. Tại sao có quá ít hướng dẫn ở đó cho một quá trình rất phổ biến? Tôi có thiếu cái gì đó rõ ràng không?
+2

Bạn có sử dụng đá quý Omniauth cho khả năng kết nối facebook? Kết hợp devise và omniauth sẽ chăm sóc 3 và 4 cho bạn! – MBHNYC

+0

@MBHNYC: sửa tôi nếu tôi sai, nhưng đây chỉ là trường hợp người dùng đăng nhập qua trang web. Trong trường hợp của OP, người dùng đăng nhập thông qua ứng dụng iphone. Trang web không thấy luồng. –

+0

có, nhưng bạn vẫn chuyển cùng một thông tin lên Facebook và các cuộc gọi lại có thể được sửa đổi để không hiển thị bất kỳ chế độ xem nào (hoặc bất kỳ ứng dụng iOS nào), nếu bạn tạo/ghi đè tất cả các bộ điều khiển/lượt xem OP nên có tất cả các công cụ lập trình để đáp ứng yêu cầu. – MBHNYC

Trả lời

0

Bạn phải sử dụng cùng một mã thông báo trên máy chủ và ứng dụng khách ios. Một giải pháp đơn giản là đặt tất cả logic trên phía máy chủ bởi thiết bị + omniauth, iOS chỉ xử lý giao diện người dùng và phản hồi từ phía máy chủ. Nếu bạn muốn nhận mã thông báo từ iOS như sử dụng facebook iOS SDK, bạn nên báo mã thông báo cho phía Máy chủ, nhưng có vẻ không an toàn.

1

Tại sao bạn không thể sử dụng đá quý omniauth-facebook. Một giải pháp rất đơn giản của nó để có được mã thông báo truy cập nếu bạn sử dụng phát triển tiềm năng của nó sẽ tăng gấp đôi. Đảm bảo rằng bạn cần nhận mã thông báo truy cập khác nhau tại thời điểm đăng nhập khác nhau.

Bạn có thể đi qua liên kết này https://github.com/pramodv-nyros/social-login-in-rails

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