2010-02-19 42 views
5

Tôi đang cố gắng sử dụng đá quý Rest-client để thực hiện một số tác vụ nhỏ cho ứng dụng của tôi sử dụng Authlogic để xác thực người dùng. Từ API Rest-của khách hàng, tôi thấy rằng người ta có thể gửi dữ liệu cần thiết cho quá trình đăng nhập như thế này:Đăng nhập với khách hàng tự động đăng nhập

require 'rest_client' 
RestClient.post "http://127.0.0.1:3000/user_sessions", {:user_session => {:username => 'myusername', :password => 'mypassword'}}.to_json, :content_type => :json, :accept => :json 

Nhìn vào log phát triển của tôi, tôi thấy rằng các ứng dụng đã đăng nhập tôi và chuyển cho tôi một cách chính xác để trang riêng của người dùng. Tuy nhiên, khi tôi sau đó đã cố gắng để 'nạp' trang tin,

RestClient.get 'http://127.0.0.1:3000/users/1' 

Tôi đưa trở lại trang đăng nhập một lần nữa, như thể tôi đã không đăng nhập. Vì vậy, tôi đã tự hỏi nếu điều này đã làm với cái gì được gọi là phiên hoặc cookie?

Tôi đã sử dụng cURL để tạo lại kịch bản này thành công, nơi tôi sử dụng nút '-c cookie.txt' để lưu thông tin về việc tôi đã đăng nhập và sử dụng nút '-b cookie.txt' cho mỗi cuộc gọi để nói với máy chủ từ xa về chứng thực của tôi. Tôi có thể hiểu khái niệm này giống như một con tem trên cổ tay của bạn khi đi trong một công viên chủ đề hoặc một quán bar nơi họ biết bạn đã trả tiền. Nhưng tôi thấy không đề cập đến một cơ chế như vậy trong RestClient. Bất kỳ sự trợ giúp nào cũng sẽ tuyệt vời để giải quyết vấn đề này. Tôi cũng không phiền khi thử các ứng dụng khách http khác.

Kính trọng

Trả lời

7

Nếu bạn sử dụng Authlogic, bạn có thể sử dụng Mã thông báo sử dụng duy nhất thay cho người dùng/thẻ. Mã thông báo sử dụng một lần dành riêng cho các cuộc gọi API giống như những gì bạn đang làm ở đây.

Xem: The rdocs here

+0

Cảm ơn Josh! Tôi sẽ xem xét nó ngay bây giờ. Bây giờ, tôi lo ngại về từ 'Đơn' trong API, điều đó có nghĩa là tôi không thể sử dụng lại nó để đăng nhập? Hay nó thay đổi mỗi khi tôi sử dụng nó? –

+1

@Nik nó chỉ có nghĩa là bạn phải cung cấp nó trên mỗi yêu cầu. Vì vậy, thay vì mô phỏng một đăng nhập và cố gắng để vượt qua các cookie xung quanh, bạn sẽ chỉ bao gồm các mã thông báo. Nó không tự động thay đổi. Hãy nghĩ về nó như một khóa API. –

+0

Điều đó thật tuyệt vời, chính xác là những gì tôi thực sự muốn. Tôi sử dụng Authlogic với Railscast của Ryan Bates làm hướng dẫn, không bao gồm SingleAccesstoken. User.rb của tôi trông như thế này create_table "users",: force => true do | t | t.string "username" t.string "email" t.string "crypted_password" t.string "password_salt" t.string "persistence_token" t.datetime "created_at" t.datetime "updated_at" t.integer "person_id" t.string "perishable_token",: default => "",: null => false kết thúc Làm cách nào để nhận được chức năng mã thông báo truy cập đơn? Chỉ cần di chuyển? –

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