【问题标题】:Issue with omniauth-twitter callbackomn​​iauth-twitter 回调问题
【发布时间】:2014-10-18 08:03:35
【问题描述】:

我正在使用omniauth gem 在/auth/twitter 上提供“使用twitter 登录”链接。

当我在开发环境中运行项目时,一切似乎都很好。但是我在尝试登录生产时遇到错误。

在我运行 rails s -e production 并单击“使用 Twitter 登录”按钮后

在 2014-08-25 09:42:15 +0200 开始为 127.0.0.1 获取“/auth/twitter” 我,[2014-08-25T09:42:15.959278 #5144] INFO --omniauth: (twitter) 请求阶段已启动。

开始 GET "/auth/twitter/callback?oauth_token=BnjEPgOdMrOMMSE**************&oauth_verifier=mXD2WICHMs1k6z04UJ***********" 用于 127.0.0.1 2014-08-25 09:42:17 +0200 我,[2014-08-25T09:42:17.920926 #5144] INFO --omniauth: (twitter) 回调阶段已启动。

SessionsController 处理#create as HTML 参数:{"oauth_token"=>"lUv4mg4F*************", "oauth_verifier"=>"l0i8DN********", "provider"=>"twitter" }

SQLite3::SQLException: no such table: users: SELECT "users".* FROM "users" WHERE "users"."provider" = 'twitter' AND "users"."uid" = '27*** **' ORDER BY "users"."id" ASC LIMIT 1

我尝试手动将 users 表添加到 db/migrate 并运行 rake db:migrate,但这不起作用。

我的 Gemfile 文件:

source 'https://rubygems.org'


gem 'rails_12factor'
gem 'spork'

gem 'omniauth-twitter', '~> 1.0.1'

gem 'rb-readline'

gem 'rspec-rails'
gem 'rspec'

gem 'bootstrap-sass'

gem 'bootstrap'

gem 'twitter-bootstrap-rails'

gem 'twitter-text'

gem 'twitter', '~> 5.3.1'

gem 'sqlite3'

gem 'sass-rails', '~> 4.0.3'

gem 'uglifier', '>= 1.3.0'

gem 'coffee-rails', '~> 4.0.0'

gem 'jquery-rails'
gem 'turbolinks'

gem 'jbuilder', '~> 2.0'

gem 'sdoc', '~> 0.4.0',          group: :doc

gem 'spring',        group: :development

我的配置/初始化程序/omniauth_twitter.rb

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :twitter, Rails.application.config.twitter_key, Rails.application.config.twitter_secret
end

那就是 sessionController#create

class SessionsController < ApplicationController
  def create
    begin
    user = User.from_omniauth( env["omniauth.auth"] )
    session[:user_id] = user.id
    redirect_to root_path
    rescue => ex
    logger.error ex.message
    end
  end
  ...
end

和 User.from_omniauth

  def self.from_omniauth(auth)
    where(auth.slice(:provider, :uid)).first_or_initialize.tap do |user|
      user.provider = auth.provider
      user.uid = auth.uid
      user.name = auth.info.name
      user.oauth_token = auth.credentials.token
      user.oauth_secret = auth.credentials.secret
     user.save!
    end
  end

【问题讨论】:

    标签: ruby-on-rails twitter callback omniauth


    【解决方案1】:

    您是否在生产环境中运行迁移?

    rake db:migrate RAILS_ENV=production
    

    【讨论】:

    • 好吧,我之前做过定期 rake db:migrate,但这并没有解决这个问题。现在我用 RAILS_ENV=production 运行它,这似乎解决了它。没想到会这么容易。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-06
    • 2011-10-06
    • 1970-01-01
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多