Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何为heroku站点为rails设置facebook应用程序?_Ruby On Rails_Heroku_Omniauth Facebook - Fatal编程技术网

Ruby on rails 如何为heroku站点为rails设置facebook应用程序?

Ruby on rails 如何为heroku站点为rails设置facebook应用程序?,ruby-on-rails,heroku,omniauth-facebook,Ruby On Rails,Heroku,Omniauth Facebook,我的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

我的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 settings/advanced上,这是我的设置: 有效的OAuth重定向URI为=

在facebook设置/basic上,我的应用程序域是= 本地主机

我的网站URL为=

我的设计.rb

    config.omniauth :facebook, 'somekey', 'somekey', scope: 'email', info_fields: 'email, name'
我的omniauth\u回调\u 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
class OmniAuthCallbackController:身份验证
如果是导航格式,设置flash消息(:notice,:success,:kind=>“Facebook”)?
其他的
会话[“designe.facebook_data”]=request.env[“omniauth.auth”]
将\重定向到新\用户\注册\ url
结束
结束
结束
我的应用程序/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
class用户
在我的应用程序/views/designe/sessions/new.html.erb中

<%= link_to "Sign In with Facebook", user_omniauth_authorize_path(:facebook) %>

在designe.rb中,我建议您使用以下ENV变量:

config.omniauth :facebook, ENV['FACEBOOK_KEY'], ENV['FACEBOOK_SECRET'], scope: 'email', info_fields: 'email, name'
在开发模式中,您可以使用非常有用的本地配置

然后在Heroku配置中使用以下设置:

heroku config:set FACEBOOK_KEY="your_fb_app_key"
heroku config:set FACEBOOK_SECRET="your_fb_app_secret"

完成后,您的Heroku应用程序应获取正确的Facebook凭据。只需确保您的Facebook应用程序已配置为在应用程序域设置中使用您的生产URL即可。

您是否有config/initializers/omniauth.rb初始值设定项?你能用这个文件编辑你的问题吗?我猜你没有在heroku配置中设置ENV['FACEBOOK_KEY']和ENV['FACEBOOK_SECRET']?我把FACEBOOK密钥放在config/initializers/designe.rb。如何编辑问题?在中,它说config/initializers/omniauth.rb将与我尝试的config.omniauth冲突。要编辑上面的问题,只需单击灰色的小“编辑”链接。然后添加初始值设定项文件。这将帮助您调试它。