2012-07-30 35 views
10

Tôi đã triển khai API REST và bảo vệ nó bằng trình giữ cửa. Tôi đã viết một chương trình khách hàng nhỏ để truy cập vào nó và nó hoạt động tốt bằng luồng thông tin xác thực của chủ sở hữu tài nguyên.Đăng trong OAuth bằng thông tin đăng nhập của khách hàng với Người quản lý cửa

Bây giờ tôi đang cố thực hiện cuộc gọi bằng thông tin đăng nhập của khách hàng flow. Vì vậy, tôi đã làm theo ví dụ trong liên kết.

Mọi thứ hoạt động tốt khi tôi đang sử dụng yêu cầu GET, nhưng khi tôi đang sử dụng yêu cầu POST, tôi nhận được 401 Unauthorized. Đây là cuộc gọi đến một phương thức không yêu cầu chủ sở hữu tài nguyên.

Các điều có liên quan duy nhất tôi có trong bộ điều khiển API của tôi là:

doorkeeper_for :all 

tôi đã không thực hiện bất kỳ phạm vi hoặc không có gì thuộc loại đó (tôi yêu cầu?).

mã khách hàng của tôi trông như thế này (chính xác như trong example in github):

require 'rest-client' 
require 'json' 

client_id = 'my_client_id...' 
client_secret = 'my_client_secret...' 

response = RestClient.post 'http://localhost:3000/oauth/token', { 
    grant_type: 'client_credentials', 
    client_id: client_id, 
    client_secret: client_secret 
} 
token = JSON.parse(response)["access_token"] 

# this line works great: 
RestClient.get 'http://localhost:3000/api/v1/flights.json', { 'Authorization' => "Bearer #{token}" } 
# this line always fails (401 Unauthorized): 
RestClient.post 'http://localhost:3000/api/v1/flights.json', { 'Authorization' => "Bearer #{token}" } 

ý tưởng Bất kỳ những gì tôi có thể làm sai? Có điều gì đặc biệt tôi nên làm trong ứng dụng của mình để cho phép luồng thông tin ứng dụng khách chạy không?

Trả lời

16

Tôi đã tìm ra. Vấn đề là tôi đã không sử dụng RestClient.post đúng cách. Tham số thứ hai nên là trọng tải và thứ ba phải là tiêu đề. Nó phải là một cái gì đó như thế này:

RestClient.post 'http://localhost:3000/api/v1/flights.json', {}, { 'Authorization' => "Bearer #{token}" } 
+2

Đọc câu trả lời của bạn đã giúp tôi khắc phục sự cố tôi đang gặp phải. Cảm ơn bạn đã quay lại và giải quyết vấn đề này! – lyonsinbeta

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