Ruby on rails 如何为heroku站点为rails设置facebook应用程序?
我的facebook应用程序设置只能在本地主机上运行,但不能在heroku网站上运行 我在heroku日志中发现了这个错误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
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冲突。要编辑上面的问题,只需单击灰色的小“编辑”链接。然后添加初始值设定项文件。这将帮助您调试它。