2012-05-25 37 views
7

Người sử dụng ứng dụng Rails của tôi có thể xác thực trong một trong những cách cư xử 2:xác thực sử dụng Facebook thông qua Rails API

  • Sử dụng tài khoản Facebook của họ
  • Sử dụng xác thực của chúng ta

Tôi đang sử dụng Facebook SDK trên Android và deviseomniauth trên Đường ray.

Làm cách nào để xác thực với ứng dụng Rails trên Android để tôi có thể tìm nạp thông tin tôi cần từ máy chủ?

NB: Tôi nhận thấy câu hỏi này đang nhận được số lượng lượt xem hợp lý gần đây. Xin đừng làm theo lời khuyên được đưa ra trong chủ đề này quá chặt chẽ - web di chuyển nhanh và nó có từ 3 năm trước!

Trả lời

2

Điều này có thể được thực hiện bằng cách sử dụng đá quý fb_graph (không phải fbgraph!).

Bạn chỉ có thể thêm nó vào gemfile của bạn và làm

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

nơi token là mã thông báo OAuth bạn có bằng cách sử dụng, ví dụ, Facebook SDK trên Android. user.email sẽ là địa chỉ email của người dùng (nếu bạn thiết lập các quyền cần thiết).

Bạn có thể sử dụng URL này để thử nghiệm:

https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri=https://www.facebook.com/connect/login_success.html&response_type=token 
+1

Chỉ cần thông báo câu trả lời này có một số sự chú ý. Hãy ghi nhớ điều này là 2,5 năm trước và nhiều thứ có thể đã thay đổi kể từ đó. Hãy cẩn thận với những gì bạn lấy từ điều này! –

0

Điều đó hoàn toàn phụ thuộc vào cách thức hoạt động của hệ thống xác thực của bạn. Bạn sẽ cần phải tạo một API trên máy chủ của mình để xử lý giao tiếp từ ứng dụng Android và chuyển thông tin giữa cả hai bằng cách sử dụng API.

+0

tôi sử dụng đưa ra và omniauth, đó là khá nhiều cách thức hoạt động. Đối với phía Android, tôi sử dụng Facebook SDK. –

+0

SDK Facebook sẽ chỉ xác thực với Facebook. Bạn sẽ cần phải tạo một Thư viện Android sẽ xác thực với trang web Rails của bạn. Đó là cách duy nhất bạn có thể lấy lại thông tin từ máy chủ của mình một cách an toàn. –

+0

auths máy chủ của tôi với facebook thông qua Omniauth.Tôi đã tự hỏi nếu tôi có thể sử dụng Facebook SDK để đăng nhập người dùng và sau đó thực hiện một 'GET' để' người dùng/auth/facebook' để người dùng có thể được authed với máy chủ của tôi, quá. (là điều này khó hiểu? Tôi sẽ viết lại nó nếu tôi không thể giải thích bản thân mình) –

0

Niraj Shah hoàn toàn đúng, mặc dù câu trả lời có thể không đủ chi tiết cho bạn. Để có câu trả lời chuyên sâu cho câu hỏi của bạn, hãy xem Securing an API railscast by Ryan Bates đã được phát hành gần đây. Nó bao gồm Xác thực cơ bản HTTP.

Bạn cũng có thể muốn xem xét tùy chọn nâng cao hơn để bảo mật API của mình/cung cấp cho người dùng đã đăng ký quyền truy cập vào dữ liệu của họ. Có một sự railscast về điều này cũng như ở đây: http://railscasts.com/episodes/353-oauth-with-doorkeeper - mặc dù đó là một tập chuyên nghiệp, vì vậy bạn cần phải đăng ký cho nó để xem nó.

+0

Cảm ơn các liên kết. Mặc dù vậy, tôi đang sử dụng devise, không phải là auth của HTTP. –

+0

Xác thực API được tách riêng khỏi việc xác thực người dùng! Về mặt lý thuyết, bạn có thể gửi tên người dùng/mật khẩu (hoặc nhà cung cấp + uid - hoặc bất kỳ thứ gì khác mà bạn có thể sử dụng để nhận dạng duy nhất người dùng) với mọi yêu cầu đối với API và xác thực chống lại nó. Tuy nhiên, đây chỉ là kiểu xấu (và nếu bạn làm điều đó, hãy đảm bảo sử dụng SSL!). Việc xác thực bằng cách sử dụng mã thông báo như trong OAuth là cách để thực hiện. – emrass

+0

OK, tạo ra hỗ trợ mã thông báo dựa trên auth, sẽ cố gắng chuyển sang điều đó. Vẫn không hiểu cách tôi nên xác thực người dùng đăng nhập bằng Facebook. –

0

Francisco, tôi có cùng nhu cầu.

Kịch bản phát triển sử dụng token_authenticatable có vẻ đơn giản và không phải là vấn đề nhưng tôi không chắc chắn cách tốt nhất để xử lý kịch bản Facebook. Về phía web, đối với FB auth Tôi đang sử dụng omniauth-facebook như được ghi ở đây: https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview. Tôi nghĩ rằng điều này sử dụng OAuth với FB là một nhà cung cấp vì vậy nó là một khả năng tốt mà RailsCast mới nhất về quản lý cửa đảm bảo một API với OAuth nên làm các trick. Tôi đã không thử nó nhưng sẽ làm như vậy sớm trừ khi bạn đánh bại tôi với nó. Đây là liên kết: http://railscasts.com/episodes/353-oauth-with-doorkeeper.

+0

Xin chào. Tôi sẽ sớm đăng câu trả lời cho câu hỏi của riêng tôi vì lợi ích của hậu duệ. Những gì bạn phải làm là sử dụng đá quý 'fb_graph' (không phải' fbgraph'!). Sau đó, bạn có thể thêm nó vào gemfile của bạn và làm 'user = FbGraph :: User.me (token) .fetch', trong đó' token' là mã thông báo oauth mà bạn nhận được bằng cách sử dụng, ví dụ, Facebook SDK trên Android. 'user.email' sẽ có địa chỉ email của người dùng (nếu bạn thiết lập các quyền cần thiết). Đừng ngần ngại liên hệ với tôi nếu tôi không rõ ràng. –

+0

Với mục đích thử nghiệm, bạn có thể sử dụng 'irb' và 'GET' trang này: https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri=https://www.facebook.com/connect/login_success. html & response_type = token Nếu bạn đã thành công, bạn sẽ được chuyển hướng đến URI bằng mã thông báo truy cập trên đó. Sau đó, bạn có thể sử dụng mã thông báo đó theo cách được đề cập ở trên. –

+0

tuyệt vời, điều đó sẽ hoạt động, cảm ơn! –

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