Twitter ::错误::在PostsController中未经授权#create – 令牌无效或过期

为什么“创建”会给我一个无效/过期的令牌错误?

用户可以很好地登录(因此他们经过正确的身份validation),但是当他们尝试创建post时,我收到此错误。 我正在使用Omniauth gem(v1.1.4)进行身份validation,使用Twitter gem(v4.6.2)发布到Twitter。 如果重要的话,Omniauth-twitter的gem是v.0.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 

你需要像’@ 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 

我认为您使用的“身份validation”表中的当前“令牌”和“机密”已过期。

  • 您只需尝试删除“身份validation”表中的所有行,然后再次使用Twitter帐户登录,看看它是否正常工作。
  • 或者尝试在用户使用Twitter帐户进行身份validation后立即设置断点,然后在手动设置带有返回的身份validation信息的“令牌”和“机密”时执行推文发布行:[“凭据”] [“令牌”]和[“凭证”] [“令牌”]。 我想推文会发布。

如果它仍然不起作用,您最好还显示其他相关代码,如会话控制器。 您的身份validation流程的整体情况将更有助于解决问题。