【发布时间】:2015-11-17 11:59:56
【问题描述】:
我的 facebook 应用程序设置仅适用于我的本地主机,但不适用于 heroku 网站。
我在 heroku 日志中收到此错误。
ERROR -- omniauth: (facebook) Authentication failure! no_authorization_code: OmniAuth::Strategies::Facebook::NoAuthorizationCodeError, must pass either a `code` (via URL or by an `fbsr_XXX` signed request cookie)
在 facebook 设置/高级中,这是我的设置: 有效的 OAuth 重定向 URI 为 = http://localhost:3000
在 facebook settings/basic 中,我的 App Domains 是 = 本地主机
我的网站网址是 = http://localhost:3000/
我的设计.rb
config.omniauth :facebook, 'somekey', 'somekey', scope: 'email', info_fields: 'email, name'
我的omniauth_callbacks_controller.rb
class OmniauthCallbacksController < Devise::OmniauthCallbacksController
def facebook
@user = User.from_omniauth(request.env["omniauth.auth"])
if @user.persisted?
sign_in_and_redirect @user, :event => :authentication
set_flash_message(:notice, :success, :kind => "Facebook") if is_navigational_format?
else
session["devise.facebook_data"] = request.env["omniauth.auth"]
redirect_to new_user_registration_url
end
end
end
我的 app/models/user.rb
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable, :omniauthable
def self.from_omniauth(auth)
result = User.where(email: auth.info.email).first
if result
return result
else
where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
user.fullname = auth.info.name
user.provider = auth.provider
user.uid = auth.uid
user.email = auth.info.email
user.image = auth.info.image
user.password = Devise.friendly_token[0, 20]
end
end
end
end
在我的 app/views/devise/sessions/new.html.erb 中,
<%= link_to "Sign In with Facebook", user_omniauth_authorize_path(:facebook) %>
【问题讨论】:
-
你有 config/initializers/omniauth.rb 初始化器吗?你能用这个文件编辑你的问题吗?我的猜测是你没有在你的 Heroku 配置中设置 ENV['FACEBOOK_KEY'] 和 ENV['FACEBOOK_SECRET']?
-
我将 facebook 密钥放在 config/initializers/devise.rb 中。如何编辑问题?在github.com/plataformatec/devise/wiki/OmniAuth:-Overview 中,它说 config/initializers/omniauth.rb 将与我尝试做的 config.omniauth 发生冲突。
-
要编辑上面的问题,只需点击灰色的“编辑”小链接。然后添加您的初始化程序文件。这将有助于为您调试它。
标签: ruby-on-rails heroku omniauth-facebook