2011-01-04 21 views
5

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?

Trả lời

3

Tôi đã tìm ra vấn đề và bây giờ tôi cảm thấy khá ngớ ngẩn. Đã có dấu phẩy trên Mô hình người dùng không nên ở đó. Mô hình phải là

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 

Và bây giờ mọi thứ hoạt động tốt.

2

Thay vì mã hóa thủ công này., Bạn có thể muốn thử sử dụng đá quý twitter (gem install twitter.) Hoạt động cho chúng tôi. Cú pháp là:

httpauth = Twitter::HTTPAuth.new(twitterName, twitterPass) 
client = Twitter::Base.new(httpauth) 
client.update(yourTweetText) 
+0

Đ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. –

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