Tôi đã làm theo hướng dẫn OmniAuth đơn giản (http://asciicasts.com/episodes/241-simple-omniauth) và tôi có thể đăng nhập bằng tài khoản twitter của mình trên dịch vụ. Bây giờ tôi muốn truy cập vào twitter API và tweet từ ứng dụng. Mã của tôi như sau:Twitter API qua OmniAuth trên Rails 3, Net :: HTTPUnauthorized hell
class TwitterController < ApplicationController
def prepare_access_token(oauth_token, oauth_token_secret)
consumer = OAuth::Consumer.new("KEY", "SECRET",
{
:site => "http://api.twitter.com"
})
# now create the access token object from passed values
token_hash =
{
:oauth_token => oauth_token,
:oauth_token_secret => oauth_token_secret
}
access_token = OAuth::AccessToken.from_hash(consumer, token_hash)
return access_token
end
def tweet
# Exchange our oauth_token and oauth_token secret for the AccessToken instance.
@access_token = prepare_access_token(current_user.token, current_user.secret)
@response = @access_token.request(:post, "http://api.twitter.com/1/statuses/update.json", :status => "Tweet pela API")
render :html => @response.body
end
end
Dòng kết xuất không làm gì cả. Hơn nữa, nếu tôi thêm
<p><%= @response %></p>
đến quan điểm của tôi, tôi nhận được
#<Net::HTTPUnauthorized:0x2ac5149e94f0>
Tuy nhiên, tôi có thể có được tên người dùng từ tài khoản twitter.
mô hình người dùng của tôi là như sau:
class User < ActiveRecord::Base
def self.create_with_omniauth(auth)
create! do |user|
user.provider = auth["provider"]
user.uid = auth["uid"]
user.name = auth["user_info"]["name"]
user.token = auth['credentials']['token'],
user.secret = auth['credentials']['secret']
end
end
end
Tôi đang làm gì sai?
Điều đó sẽ không hoạt động vì httpauth không còn khả dụng nữa. Bên cạnh đó, tôi đã có cookie. –