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流程的整体情况将更有助于解决问题。