2012-06-18 23 views
7

Đây có lẽ là một câu hỏi rất câm, nhưng tôi đã nhìn chằm chằm vào điều này hàng giờ và không thể tìm thấy những gì tôi đang làm sai."Thiếu tham số redirect_uri" phản hồi từ Facebook với Python/Django

Tôi đang cố gắng sử dụng Python để xác thực với API Facebook, nhưng có vấn đề yêu cầu mã thông báo truy cập của người dùng. Sau khi nhận được một mã số, tôi thực hiện một yêu cầu đến https://graph.facebook.com/oauth/access_token như vậy:

conn = httplib.HTTPSConnection("graph.facebook.com") 
params = urllib.urlencode({'redirect_uri':request.build_absolute_uri(reverse('some_app.views.home')), 
          'client_id':apis.Facebook.app_id, 
          'client_secret':apis.Facebook.app_secret, 
          'code':code}) 
conn.request("GET", "/oauth/access_token", params) 
response = conn.getresponse() 
response_body = response.read() 

Để đáp lại, tôi nhận được

{ "lỗi": { "message": "Thiếu thông số redirect_uri"," nhập ":" OAuthException "," code ": 191}}

Bất kỳ ý tưởng nào có thể xảy ra sai? Tôi đã xác minh rằng redirect_uri đang được chuyển trên miền ứng dụng, nhưng có thể là vấn đề đang được lưu trữ cục bộ và miền đó chỉ được chuyển hướng đến máy chủ cục bộ bởi tệp máy chủ của tôi?

Cảm ơn sự giúp đỡ của bạn!

chỉnh sửa:

tôi đã làm việc này bằng cách sử dụng thư viện yêu cầu:

params = {'redirect_uri':request.build_absolute_uri(reverse('profiles.views.fb_signup')), 
          'client_id':apis.Facebook.app_id, 
          'client_secret':apis.Facebook.app_secret, 
          'code':code} 

r = requests.get("https://graph.facebook.com/oauth/access_token",params=params) 

Tuy nhiên, tôi vẫn muốn trở thành phụ thuộc vào một thư viện khi điều này cần được hỗ trợ natively mà không cần quá nhiều khó khăn. Có lẽ đây là đòi hỏi quá nhiều ...

+0

Nếu localhost bạn được thiết lập một cách chính xác cần làm việc. Facebook sẽ kiểm tra xem chuyển hướng có hoạt động không? –

+0

Đó là những gì tôi nghĩ. Bất kỳ ý tưởng gì khác có thể đi sai? – user1462558

+0

mmm, trên nhà phát triển facebook, hãy truy cập ứng dụng của bạn. URI chuyển hướng nhanh để khớp với ứng dụng uri –

Trả lời

1

Trong ví dụ đầu tiên của bạn (một trong những sử dụng HTTPSConnection), bạn đang đi qua params trong cơ thể của các yêu cầu:

conn.request("GET", "/oauth/access_token", params) 

này là không chính xác (GET yêu cầu nên không có thân thể). Thay vào đó, các thông số cần được thông qua như là một phần chuỗi truy vấn của URL:

conn.request("GET", "/oauth/access_token?" + params) 
Các vấn đề liên quan