我在heroku 上使用omniauth-identity 来管理登录。Omniauth 未在身份回调的环境中设置。
class SessionsController < ApplicationController
. . .
private
def omniauth
fail "No omniauth in environment" unless request.env["omniauth.auth"] || session[:omniauth]
request.env["omniauth.auth"] || session[:omniauth]
end
end
果然失败了:
2012-05-31T20:46:56+00:00 app[web.1]: Started POST "/auth/identity/callback" for 74.192.34.328 at 2012-05-31 20:46:56 +0000
2012-05-31T20:46:56+00:00 app[web.1]: app/controllers/sessions_controller.rb:58:in `omniauth'
2012-05-31T20:46:56+00:00 app[web.1]: app/controllers/sessions_controller.rb:6:in `create'
2012-05-31T20:46:56+00:00 app[web.1]: RuntimeError (No omniauth in environment):
我需要以某种方式设置 Heroku 吗?它在开发中工作。
编辑:
# Gemfile
source 'http://rubygems.org'
gem 'anjlab-bootstrap-rails', '>= 2.0', :require => 'bootstrap-rails'
gem 'bcrypt-ruby', :require => 'bcrypt'
gem "cancan"
gem 'copies_omniauth'
gem "jquery-rails"
gem 'omniauth'
gem 'omniauth-browserid'
gem 'omniauth-facebook'
gem 'omniauth-identity'
gem 'omniauth-twitter'
gem 'quantity'
gem 'rails', '>=3.2.0'
gem "state_machine"
group :assets do
gem 'sass-rails', " >= 3.2.0"
end
group :development do
gem 'faker'
gem 'rspec-rails'
gem "sqlite3"
end
group :test do
gem 'rspec-rails'
gem 'factory_girl_rails'
gem 'guard'
gem 'guard-bundler'
gem 'guard-rails-assets'
gem 'guard-rspec'
gem 'spork'
gem "sqlite3"
end
group :production do
gem 'thin'
gem 'pg'
end
# config/initializers/omniauth.rb
Rails.application.config.middleware.use OmniAuth::Builder do
# https://developers.facebook.com/apps/445087828841937
provider :facebook, ENV['FACEBOOK_ID'], ENV['FACEBOOK_SECRET']
# https://dev.twitter.com/apps/1568910/show
provider :twitter, ENV['TWITTER_KEY'], ENV['TWITTER_SECRET']
# https://github.com/intridea/omniauth-identity
# http://railscasts.com/episodes/304-omniauth-identity?view=asciicast
provider :identity, :fields => [:email], :model => AccountPassword,
on_failed_registration: lambda { |env| AccountPasswordsController.action(:new).call(env) }
end