27 votes

Omniauth-facebook continue de signaler les informations d'identification invalides

Je suis en train de mettre en œuvre omniauth-facebook comme décrit dans Railscast #360 et ont tout à fait un barrage routier. Quand je signin cliquez sur le lien, j'ai souhaité popup me demandant d'entrée de mon facebook informations d'identification, mais quand je soumettre, je reçois un OmniAuth::Stratégies::OAuth2::CallbackError erreur. Dans les logs apache, c'est imprimée: (facebook), l'Authentification de l'échec! invalid_credentials: OmniAuth::Stratégies::OAuth2::CallbackError, OmniAuth::Stratégies::OAuth2::CallbackError

voici le code correspondant:

omniauth.rb

OmniAuth.config.logger = Rails.logger

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :facebook, ENV['FACEBOOK_APP_ID'], ENV['FACEBOOK_SECRET']
end

sessions_controller.rb

class SessionsController < ApplicationController
  def create
    user = User.from_omniauth(env["omniauth.auth"])
    session[:user_id] = user.id
    redirect_to root_url
  end

  def destroy
    session[:user_id] = nil
    redirect_to root_url
  end
end

application.html.erb

<div id="fb-root"></div>
<script>        
window.fbAsyncInit = function() {
    FB.init({
        appId      : '(**my app id**)', // App ID
        status     : true, // check login status
        cookie     : true // enable cookies to allow the server to access the session
    });

    $('#sign_in').click(function(e) {
        e.preventDefault();
        return FB.login(function(response) {
            if (response.authResponse) {
                return window.location = '/auth/facebook/callback';
            }
        });
    });

    return $('#sign_out').click(function(e) {
        FB.getLoginStatus(function(response) {
            if (response.authResponse) {
                return FB.logout();
            }
        });
        return true;
    });
};
 </script>

Ai-je raté quelque chose de simple? J'ai été la recherche d'une solution pour les derniers jours.

67voto

Tom Söderlund Points 1319

Il semble que omniauth-facebook v1.4.1 ait introduit un problème avec CSRF. Un correctif temporaire consiste simplement à revenir à la version 1.4.0. Dans votre Gemfile, changez la ligne omniauth-facebook en:

 gem 'omniauth-facebook', '1.4.0'
 

J'ai signalé le problème: https://github.com/mkdynamic/omniauth-facebook/issues/73

6voto

Pragnesh Vaghela Points 1009

J'ai eu un problème similaire où cela fonctionnait pour 1 utilisateur mais obtenait l'erreur d'authentification pour le 2ème utilisateur.

La désactivation du mode Sandbox (Applications> Paramètres> Avancé) semble l'avoir corrigé.

1voto

Tiago Points 1110

Dans votre omniauth.rb, ajoutez du code:

 OmniAuth.config.on_failure = Proc.new do |env| new_path = "/auth/failure"
 [302, {'Location' => new_path, 'Content-Type'=> 'text/html'}, []]
end
 

1voto

simo Points 2920

J'ai remarqué que omniauth-oauth2> 1.0.3 causera également un problème, en désinstallant la version supérieure et en gardant omniauth-oauth2 1.0.3 résolu le problème.

0voto

Giang Nguyen Points 426

J'ai ça aussi.

Supprimez le script JS dans votre application.html.erb (mais gardez le fb-root div) fonctionnera. Quoi qu'il en soit, l'écran de connexion FB ne s'affichera plus dans une fenêtre contextuelle, vous serez redirigé vers la connexion FB, puis à la place sur votre site.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X