1

「作成」で無効/期限切れのトークン エラーがスローされるのはなぜですか?

ユーザーは問題なくログインできます (したがって、適切に認証されます) が、投稿を作成しようとすると、このエラーが発生します。認証には Omniauth gem (v1.1.4) を、Twitter への投稿には Twitter gem (v4.6.2) を使用しています。それが重要な場合、Omniauth-twitter gem は v0.0.16 です。

これは私にエラーを引き起こしているコードです

class PostsController < ApplicationController
  def create
    Twitter::Client.new.update(@post.content)
  end
end

これはユーザー モデル (user.rb) の一部です。

def twitter
  unless @twitter_user
    provider = self.authentications.find_by_provider('twitter')
    @twitter_user = Twitter::Client.new(:oauth_token => provider.token, :oauth_token_secret => provider.secret) rescue nil
  end
  @twitter_user
end

これが私のomniauth初期化子です

Rails.application.config.middleware.use OmniAuth::Builder do
  configure do |config|
    config.path_prefix = '/auth'
  end

  provider :twitter, "xxxxxxxxxxxxxxxxxxxx", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
end

Twitter.configure do |config|
  config.consumer_key = "xxxxxxxxxxxxxxxxxxxx"
  config.consumer_secret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  config.oauth_token = :token
  config.oauth_token_secret = :secret
end

私のスキーマ:

create_table "authentications", :force => true do |t|
  t.integer  "user_id"
  t.string   "provider"
  t.string   "uid"
  t.datetime "created_at", :null => false
  t.datetime "updated_at", :null => false
  t.string   "secret"
  t.string   "token"
end
4

2 に答える 2

0

あなたが使用している「認証」テーブルの現在の「トークン」と「シークレット」は期限切れになっていると思います。

  • 「authentications」テーブルのすべての行を削除してから、Twitter アカウントで再度サインインして、機能するかどうかを確認してください。
  • または、ユーザーのコードが twitter アカウントで認証された直後にブレークポイントを設定し、返された認証情報で「トークン」と「シークレット」を手動で設定したら、ツイート投稿行を実行します: ["credentials"]["token"]および[「資格情報」][「トークン」]。ツイートが投稿されると思います。

それでも機能しない場合は、セッション コントローラーなどの他の関連コードも表示することをお勧めします。認証フローの全体像は、問題を解決するのに役立ちます。

于 2013-05-07T10:24:19.377 に答える
0

「@twitter_user.update」のようなものが必要です。「Twitter::Client.new」で作成した各 Twitter ユーザーに対して、omniauth のトークンとシークレットを提供する必要があります (「user.rb」モデルで行うように)。

class PostsController < ApplicationController
  def create
    # get twitter user. Feel free to change it depending on your app
    @twitter_user = User.twitter
    @twitter_user.update(@post.content)
  end
end
于 2013-04-12T08:04:14.397 に答える