2015-01-09 5 views
0

В режиме просмотра Facebook пользователь может отказаться от разрешений. Возможно, отклонения, которые были отклонены, влияют на функциональность приложения (вы можете делать с этим приложением меньше, потому что некоторые данные недоступны)Omniauth-Facebook: повторный запрос на отклоненные разрешения

Я хотел бы предупредить пользователя и снова запросить разрешения. Но я не вижу, что происходит с Omniauth-Facebook. В Facebook documentation показывает путь для достижения этой цели является добавление параметра в запросе логина называется: auth_type=rerequest

https://www.facebook.com/dialog/oauth? 
    client_id={app-id}& 
    redirect_uri={redirect-uri}& 
    auth_type=rerequest& 
    scope=email 

Я не видел способ сделать это непосредственно OmniAuth я пытался вызвать этот адрес от «авториз/facebook/Обратный вызов»после проверки разрешения самостоятельно, но я получаю следующее сообщение об ошибке, когда пользователь повторно принимает разрешение на новом сайте

ERROR -- omniauth: (facebook) Authentication failure! invalid_credentials: OmniAuth::Strategies::OAuth2::CallbackError, csrf_detected | CSRF detected 
OmniAuth::Strategies::OAuth2::CallbackError: csrf_detected | CSRF detected 
    /home/ciro/.rvm/gems/ruby-2.1.3/gems/omniauth-1.2.2/lib/omniauth/failure_endpoint.rb:25:in `raise_out!' 
    /home/ciro/.rvm/gems/ruby-2.1.3/gems/omniauth-1.2.2/lib/omniauth/failure_endpoint.rb:20:in `call' 
    /home/ciro/.rvm/gems/ruby-2.1.3/gems/omniauth-1.2.2/lib/omniauth/failure_endpoint.rb:12:in `call' 
    /home/ciro/.rvm/gems/ruby-2.1.3/gems/omniauth-1.2.2/lib/omniauth/strategy.rb:475:in `fail!' 
    /home/ciro/.rvm/gems/ruby-2.1.3/gems/omniauth-oauth2-1.2.0/lib/omniauth/strategies/oauth2.rb:73:in `callback_phase' 
    /home/ciro/.rvm/gems/ruby-2.1.3/gems/omniauth-facebook-1.6.0/lib/omniauth/strategies/facebook.rb:71:in `callback_phase' 
    /home/ciro/.rvm/gems/ruby-2.1.3/gems/omniauth-1.2.2/lib/omniauth/strategy.rb:227:in `callback_call' 
    /home/ciro/.rvm/gems/ruby-2.1.3/gems/omniauth-1.2.2/lib/omniauth/strategy.rb:184:in `call!' 
    /home/ciro/.rvm/gems/ruby-2.1.3/gems/omniauth-1.2.2/lib/omniauth/strategy.rb:164:in `call' 
    /home/ciro/.rvm/gems/ruby-2.1.3/gems/omniauth-1.2.2/lib/omniauth/builder.rb:59:in `call' 

Это мой„авториз/facebook/Обратный вызов“

on get do 
    on 'auth/facebook/callback' do 
    on param(:code) do |code| 
     email = req.env['omniauth.auth']['info']['email'] 

     if email.nil? or email.empty? 
     res.redirect "https://www.facebook.com/dialog/oauth?client_id=#{ENV['APP_ID']}&redirect_uri=http://localhost:9292/auth/facebook/callback&auth_type=rerequest&scope=email" 
     end 
    end 
    end 
end 

ответ

1

Решение состоит в том, чтобы передать параметры в запросе OmniAuth:

if email.nil? or email.empty? 
    res.redirect "/auth/facebook?scope=email" 
end 
Смежные вопросы