首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Devise + omniauth-facebook添加权限

Devise + omniauth-facebook添加权限
EN

Stack Overflow用户
提问于 2012-10-05 15:17:33
回答 2查看 1.7K关注 0票数 6

我们让用户使用最低权限进行注册,如下所示:

代码语言:javascript
复制
Devise.setup do |config|
  config.omniauth :facebook, ENV['FACEBOOK_KEY'], ENV['FACEBOOK_SECRET'],
              :scope => 'email,offline_access,user_about_me'
end

我们这样做是为了提高注册率(您要求的权限越少,转化率就越高)。

但是后来,例如,当用户想要fb分享一些东西时,我们需要publish_stream权限。

有人知道如何提升fb权限吗?例如:'email,offline_access,user_about_me,publish_stream‘

我知道用户必须通过oauth对话框again..but怎么做?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-21 08:40:49

首先,您需要添加setup: true才能升级服务的权限列表:

代码语言:javascript
复制
Devise.setup do |config|
  config.omniauth :facebook, ENV['FACEBOOK_KEY'], ENV['FACEBOOK_SECRET'],
                  :scope => 'email,offline_access,user_about_me',
                  :setup => true
end

routes.rb中添加两条路由

代码语言:javascript
复制
devise_scope :user do
  get '/users/auth/:provider/upgrade' => 'omniauth_callbacks#upgrade', as: :user_omniauth_upgrade
  get '/users/auth/:provider/setup', :to => 'omniauth_callbacks#setup'
end

第一个路由是用户应该使用user_omniauth_upgrade_path(:facebook)链接到的位置。第二个设置路由是回调,omniauth将在内部调用该回调,我们可以使用它来更改范围参数。

这些将进入omniauth_callbacks_controller.rb

代码语言:javascript
复制
def upgrade
  scope = nil

  if params[:provider] == "facebook"
    scope = 'email,offline_access,user_about_me,publish_stream'
  end

  redirect_to user_omniauth_authorize_path(params[:provider]), flash: {scope: scope}
end

当您在omniauth配置中指定setup: true时,默认情况下将调用setup_path。我们将使用它来更改策略中的默认作用域。将此内容添加到omniauth_callbacks_controller.rb

代码语言:javascript
复制
def setup
  request.env['omniauth.strategy'].options['scope'] = flash[:scope] || request.env['omniauth.strategy'].options['scope']
  render :text => "Setup complete.", :status => 404
end

最后,您可以在视图中添加:

代码语言:javascript
复制
<%= link_to "Upgrade Access", user_omniauth_upgrade_path(:facebook) %>

来源:http://willschenk.com/setting-up-devise-with-twitter-and-facebook-and-other-omniauth-schemes-without-email-addresses/#passing-dynamic-scopes-to-omniauth

票数 5
EN

Stack Overflow用户

发布于 2012-10-05 15:27:23

只使用两个权限登录facebook -1)电子邮件2) publish_stream

代码语言:javascript
复制
config.omniauth :facebook, ENV['FACEBOOK_KEY'], ENV['FACEBOOK_SECRET'],{:scope => 'email, publish_stream', :client_options => { :ssl => { :ca_file => "#{Rails.root}/config/ca-bundle.crt" } } }
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12741436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档