2012-10-05 12 views
6

jesteśmy pozwalając użytkownikom rejestrować się z minimalnymi uprawnieniami jak ten:omniauth-facebook uprawnienia Add opracować +

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

Robimy to, aby zwiększyć szybkość zapisywania (im mniej uprawnień poprosić o wyższy konwersji).

Ale kiedy na przykład użytkownik chce coś udostępnić, potrzebujemy uprawnienia publish_stream.

Czy ktoś wie, jak podnieść uprawnienia fb? na przykład: "email, offline_access, user_about_me, publish_stream"

Jestem świadomy, że użytkownik musi ponownie przejść przez okno dialogowe oauth. Ale jak to zrobić?

dzięki

+1

czy to zorientowali się jeszcze? zadając sobie to samo pytanie ... – toxinlabs

Odpowiedz

4

Najpierw trzeba dodać setup: true aby móc zaktualizować listę uprawnień usługi:

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

Dodaj dwie trasy w 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 

Pierwsza trasa to miejsce, w którym użytkownik powinien być połączony za pomocą numeru user_omniauth_upgrade_path(:facebook). Drugą trasą konfiguracji jest wywołanie zwrotne, które omniauth wywoła wewnętrznie i możemy użyć do zmiany parametru scope.

one wchodzić 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 

Po określeniu setup: true wewnątrz omniauth konfiguracji setup_path nazywany jest domyślnie. Wykorzystamy to, aby zmienić zakres z domyślnego w strategii. Dodaj to do 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 

Wreszcie, w widokach można dodać:

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

Źródło: http://willschenk.com/setting-up-devise-with-twitter-and-facebook-and-other-omniauth-schemes-without-email-addresses/#passing-dynamic-scopes-to-omniauth

-2

użycie tylko dwóch Pozwolenie na logowanie z 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

Nie jestem pewien, co masz na myśli. Teraz chcę dodać nowe uprawnienia. Powiedzmy, że w pewnym momencie użytkownik chce zrobić coś, co wymaga pozwolenia upload_photo. jak mogę otworzyć wyskakujące okienko z połączeniem facebook, które konkretnie prosi o to prawo? – Matthias