2012-04-10 16 views
5

Đang cố gắng nhận mã thông báo truy cập oauth cho facebook bằng lập trình bằng ruby.cách nhận mã thông báo truy cập oauth cho facebook bằng cách sử dụng ruby ​​

Mã của tôi là như sau:

client = OAuth2::Client.new(
    APP_ID, 
    SECRET_ID, 
    :authorize_url => "/dialog/oauth", 
    :token_url => "/oauth/access_token", 
    :site => "https://www.facebook.com/" 
) 

code = client.auth_code.authorize_url(:redirect_uri => "http://www.facebook.com/") 
token = client.auth_code.get_token(code, :redirect_uri => "https://graph.facebook.com/") 
OAuth2::AccessToken.new(client, token.token, {:mode => :query, :param_name =>"oauth_token"}) 

Khi tôi cố gắng để chạy mã ruby ​​trên, tôi nhận được ngoại lệ sau

https://www.facebook.com/dialog/oauth?response_type=code&client_id=APP_ID 
51&redirect_uri=http%3A%2F%2Fwww.facebook.com%2F 

/home/ec2-user/.rvm/gems/[email protected]/gems/oauth2-0.5.2/lib/oauth2/clie 
nt.rb:129:in `get_token': OAuth2::Error (OAuth2::Error) 
     from /home/ec2-user/.rvm/gems/[email protected]/gems/oauth2-0.5.2/li 
b/oauth2/strategy/auth_code.rb:29:in `get_token' 
     from oauth.rb:16:in `<main>' 

Any help is appreciated rất nhiều như tôi đã trải qua hơn một ngày trong khi cố gắng sắp xếp điều này.

+0

bất kỳ ý tưởng nào được đánh giá cao! –

+0

Bạn nên tăng tỷ lệ chấp nhận cho câu trả lời. –

+0

Nhưng đây là một cái gì đó để giúp bạn bắt đầu: redirect_uri của bạn xuất hiện để được Facebook.com, nhưng những người nên được url CỦA BẠN. –

Trả lời

2

Bạn đã cố gắng đặt làm redirect_uri thay vì localhost:3000 địa chỉ IP thực của bạn ex. 231.61.233.57:3000? Ngoài ra, bạn có thể thử sử dụng đường hầm ssh cho mục đích thử nghiệm để ứng dụng localhost của bạn sẽ có sẵn trên toàn thế giới. Kiểm tra điều này ra http://progrium.com/localtunnel/. Khi bạn sẽ nhận được địa chỉ ip từ công cụ này, hãy thử đặt param chuyển hướng đến nó.

+0

Tôi đồng ý rằng 'redirect_uri' có thể là vấn đề. API thực hiện chuyển hướng chỉ có thể chuyển hướng đến các URI được liên kết với ứng dụng được ủy quyền. (Tôi không biết liệu Facebook có thực hiện điều này hay không nhưng các API OAuth khác mà tôi đã làm việc cùng.) – pjmorse