2012-10-05 32 views
6

estamos dejando que los usuarios registrarse con permisos mínimos como este:Idear + OmniAuth-facebook añadir permisos

Devise.setup do |config| 
    config.omniauth :facebook, ENV['FACEBOOK_KEY'], ENV['FACEBOOK_SECRET'], 
       :scope => 'email,offline_access,user_about_me' 
end 

Hacemos esto para aumentar la tasa de suscripciones (las menos permisos que le pregunte por la más alta es la conversión).

Pero más tarde cuando, por ejemplo, el usuario quiere compartir algo, necesitamos el permiso publish_stream.

¿Alguien sabe cómo elevar los permisos de fb? por ejemplo: 'email, offline_access, user_about_me, publish_stream'

Soy consciente de que el usuario tiene que volver a pasar por el diálogo oauth ... pero ¿cómo hacer esto?

gracias

+1

has dado cuenta de esto todavía? haciéndome la misma pregunta ... – toxinlabs

Respuesta

4

En primer lugar es necesario agregar setup: true ser capaz de actualizar la lista de permisos del servicio:

Devise.setup do |config| 
    config.omniauth :facebook, ENV['FACEBOOK_KEY'], ENV['FACEBOOK_SECRET'], 
        :scope => 'email,offline_access,user_about_me', 
        :setup => true 
end 

Añadir dos rutas en routes.rb:

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 

La primera ruta es donde se debe vincular al usuario utilizando user_omniauth_upgrade_path(:facebook). La segunda ruta de configuración es la devolución de llamada que omniauth llamará internamente y podemos usar para cambiar el parámetro de alcance.

Éstas van en omniauth_callbacks_controller.rb:

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 

Cuando se especifica setup: true dentro de la configuración OmniAuth setup_path se llama por defecto. Usaremos esto para cambiar el alcance del predeterminado en la estrategia. Agregue esto a omniauth_callbacks_controller.rb:

def setup 
    request.env['omniauth.strategy'].options['scope'] = flash[:scope] || request.env['omniauth.strategy'].options['scope'] 
    render :text => "Setup complete.", :status => 404 
end 

Por último, en sus puntos de vista se puede añadir:

<%= link_to "Upgrade Access", user_omniauth_upgrade_path(:facebook) %> 

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

-2

uso sólo dos permiso de inicio de sesión con Facebook - 1) e-mail 2) publish_stream

config.omniauth :facebook, ENV['FACEBOOK_KEY'], ENV['FACEBOOK_SECRET'],{:scope => 'email, publish_stream', :client_options => { :ssl => { :ca_file => "#{Rails.root}/config/ca-bundle.crt" } } } 
+0

No estoy seguro de lo que quieres decir con eso. Lo que quiero hacer es agregar nuevos permisos más adelante. Digamos que en algún momento el usuario quiere hacer algo que requiere el permiso upload_photo. ¿Cómo puedo abrir una ventana emergente con Facebook Connect que específicamente me lo pide? – Matthias