2012-10-05 25 views
6

chúng tôi đang cho phép người sử dụng đăng ký với các điều khoản tối thiểu như thế này:lập mưu + omniauth-facebook Thêm quyền

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

Chúng tôi làm điều này để tăng tỷ lệ đăng ký (các điều khoản ít bạn hỏi cho việc chuyển đổi cao hơn).

Nhưng sau đó, ví dụ: người dùng muốn chia sẻ thứ gì đó mà chúng tôi cần quyền publish_stream.

Có ai biết cách nâng cấp quyền fb không? ví dụ: 'email, offline_access, user_about_me, publish_stream'

Tôi biết rằng người dùng phải đi qua hộp thoại oauth một lần nữa .. nhưng làm thế nào để làm điều này?

nhờ

+1

Bạn đã figured này ra chưa? tự hỏi mình cùng một câu hỏi ... – toxinlabs

Trả lời

4

Trước tiên, bạn cần phải thêm setup: true để có thể nâng cấp danh sách các quyền của dịch vụ:

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

Thêm hai tuyến đường trong 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 

Tuyến đường đầu tiên là nơi người dùng phải được liên kết bằng cách sử dụng user_omniauth_upgrade_path(:facebook). Tuyến đường thiết lập thứ hai là cuộc gọi lại mà omniauth sẽ gọi nội bộ và chúng ta có thể sử dụng để thay đổi tham số phạm vi.

Những đi vào 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 

Khi bạn xác định setup: true bên trong cấu hình omniauth setup_path được gọi là theo mặc định. Chúng tôi sẽ sử dụng điều này để thay đổi phạm vi từ mặc định trong chiến lược. Thêm phần này vào 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 

Cuối cùng, trong quan điểm của bạn, bạn có thể thêm:

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

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

-2

sử dụng chỉ có hai phép đăng nhập với facebook - 1) email 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

Bạn không chắc chắn về ý nghĩa của điều đó. Những gì tôi muốn làm là thêm quyền mới sau này. Cho phép nói tại một số thời điểm người dùng muốn thực hiện điều gì đó yêu cầu quyền tải lên_photo. làm thế nào tôi có thể mở một popup với facebook kết nối mà cụ thể yêu cầu cho rằng phải không? – Matthias

Các vấn đề liên quan