我搜索了有关此错误消息的其他线程,但无法找到解决方案。
我正在使用 gem 'omniauth-facebook' 进行身份验证(它工作正常)和 gem 'fb_graph' 的目的是在某些控制器操作被击中时发布到 facebook(在模型中创建行)。
在我的 facebook 开发者工具的应用程序设置中,我目前要求扩展权限“发布流”和“状态更新”。另外,我在用户和朋友权限中要求“发布操作”。
当我第一次登录时,它只是让我登录 - 尽管说我希望该应用程序发布,但它并不要求任何东西。任何想法为什么会这样?我还没有添加 SDK - 这有关系吗/这可能是为什么?
下面是一些代码
谢谢!
脸书初始化程序
OmniAuth.config.logger = Rails.logger
Rails.application.config.middleware.use OmniAuth::Builder do
provider :facebook, 'my_id', 'my_key', {:scope => 'publish_stream'}
end
保存后我尝试发布的操作。当这个动作被击中时,我得到
'OAuthException :: (#200) 用户尚未授权应用程序执行此操作'
使用 me.feed!行突出显示。
def create
@sub_opp = SubOpp.new(sub_opp_params)
respond_to do |format|
if @sub_opp.save
me = FbGraph::User.me(current_user.oauth_token)
me.feed!(
:message => 'Updating via FbGraph',
)
format.html { redirect_to sub_opps_url, notice: 'Sub opp was successfully created.' }
format.json { render action: 'show', status: :created, location: @sub_opp }
else
format.html { render action: 'new' }
format.json { render json: @sub_opp.errors, status: :unprocessable_entity }
end
end
结尾
用户模型
class User < ActiveRecord::Base
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.gender = auth.extra.raw_info.gender
user.email = auth.extra.raw_info.email
user.name = auth.info.name
user.oauth_token = auth.credentials.token
user.oauth_expires_at = Time.at(auth.credentials.expires_at)
user.image_url = auth.info.image
user.save!
end
结束结束