[英]Issue with omniauth-twitter callback
I am providing a "login with twitter" link on /auth/twitter with the omniauth gem. 我在/ auth / twitter上使用omniauth gem提供了“ twitter登录”链接。
everything seems to be fine when i run project in development environment. 当我在开发环境中运行项目时,一切似乎都很好。 But i get an error while trying to log in in production.
但是尝试登录生产时出现错误。
after i run rails s -e production and click 'sign in with Twitter' button 在我运行Rails s -e production并单击“使用Twitter登录”按钮后
Started GET "/auth/twitter" for 127.0.0.1 at 2014-08-25 09:42:15 +0200 I, [2014-08-25T09:42:15.959278 #5144] INFO -- omniauth: (twitter) Request phase initiated.
在2014-08-25 09:42:15 +0200 I,[2014-08-25T09:42:15.959278#5144] INFO-omniauth:(twitter)请求阶段,开始为127.0.0.1获取GET / auth / twitter启动。
Started GET "/auth/twitter/callback?oauth_token=BnjEPgOdMrOMMSE**************&oauth_verifier=mXD2WICHMs1k6z04UJ***********" for 127.0.0.1 at 2014-08-25 09:42:17 +0200 I, [2014-08-25T09:42:17.920926 #5144] INFO -- omniauth: (twitter) Callback phase initiated.
在2014-08年度为127.0.0.1开始获取GET“ / auth / twitter / callback?oauth_token = BnjEPgOdMrOMMSE **************&oauth_verifier = mXD2WICHMs1k6z04UJ ***********” -25 09:42:17 +0200 I,[2014-08-25T09:42:17.920926#5144] INFO-omniauth:(twitter)回调阶段已启动。
Processing by SessionsController#create as HTML Parameters: {"oauth_token"=>"lUv4mg4F*************", "oauth_verifier"=>"l0i8DN********", "provider"=>"twitter"}
由SessionsController#create作为HTML参数进行处理:{“ oauth_token” =>“ lUv4mg4F *************”,“ oauth_verifier” =>“ l0i8DN ************”,“提供者“ =>” 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
SQLite3 :: SQLException:没有这样的表:users:SELECT“ users”。* FROM“ users” WHERE“ users”。“ provider” ='twitter'AND“ users”。“ uid” = '27 *****' ORDER BY“ users”。“ id” ASC LIMIT 1
i tried to add users table to db/migrate manualy and run rake db:migrate, but that didn't work. 我试图手动将用户表添加到db / migrate并运行rake db:migrate,但这没有用。
my Gemfile file: 我的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
my config/initializers/omniauth_twitter.rb 我的配置/初始化/ omniauth_twitter.rb
Rails.application.config.middleware.use OmniAuth::Builder do
provider :twitter, Rails.application.config.twitter_key, Rails.application.config.twitter_secret
end
and that's sessionsController#create 那就是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
and User.from_omniauth 和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
您是否在生产环境中进行迁移?
rake db:migrate RAILS_ENV=production
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.