2017-10-21 66 views
0

je veux me connecter à mon site web en utilisant compte facebook, j'ai d'abord créé le fichier facebook.yml dans la configurationauthentification Facebook on Rails 5, aucune méthode [] Erreur

development: 
app_id: 28679********* 
secret: ba02f0735cfdd4************ 

Puis j'ai créé facebook.rb dans/config/initializers

FACEBOOK_CONFIG = YAML.load_file("#{::Rails.root}/config/facebook.yml")[::Rails.env] 

Ensuite, je fais un autre fichier appelé omniauth.rb

OmniAuth.config.logger = Rails.logger 
Rails.application.config.middleware.use OmniAuth::Builder do 
    provider :facebook, FACEBOOK_CONFIG['app_id'], FACEBOOK_CONFIG['secret'], {:scope => 'public_profile, email'},{:info_fields => 'id,first_name,middle_name,last_name,email,name,link'} 
end 

Maintenant, si je lance tout ce qu'il continue à dire que

rake aborted! 
NoMethodError: undefined method `[]' for nil:NilClass 
/home/van/FastMail/config/initializers/omniauth.rb:3:in `block in <top (required)>' 
/home/van/.rvm/gems/ruby-2.4.2/gems/rack-2.0.3/lib/rack/builder.rb:55:in `instance_eval' 
/home/van/.rvm/gems/ruby-2.4.2/gems/rack-2.0.3/lib/rack/builder.rb:55:in `initialize' 
/home/van/.rvm/gems/ruby-2.4.2/gems/omniauth-1.7.1/lib/omniauth/builder.rb:6:in `initialize' 
/home/van/.rvm/gems/ruby-2.4.2/gems/actionpack-5.1.4/lib/action_dispatch/middleware/stack.rb:35:in `new' 
/home/van/.rvm/gems/ruby-2.4.2/gems/actionpack-5.1.4/lib/action_dispatch/middleware/stack.rb:35:in `build' 
/home/van/.rvm/gems/ruby-2.4.2/gems/actionpack-5.1.4/lib/action_dispatch/middleware/stack.rb:99:in `block in build' 
/home/van/.rvm/gems/ruby-2.4.2/gems/actionpack-5.1.4/lib/action_dispatch/middleware/stack.rb:99:in `each' 
/home/van/.rvm/gems/ruby-2.4.2/gems/actionpack-5.1.4/lib/action_dispatch/middleware/stack.rb:99:in `inject' 
/home/van/.rvm/gems/ruby-2.4.2/gems/actionpack-5.1.4/lib/action_dispatch/middleware/stack.rb:99:in `build' 
/home/van/.rvm/gems/ruby-2.4.2/gems/railties-5.1.4/lib/rails/engine.rb:508:in `block in app' 
/home/van/.rvm/gems/ruby-2.4.2/gems/railties-5.1.4/lib/rails/engine.rb:504:in `synchronize' 
/home/van/.rvm/gems/ruby-2.4.2/gems/railties-5.1.4/lib/rails/engine.rb:504:in `app' 
/home/van/.rvm/gems/ruby-2.4.2/gems/railties-5.1.4/lib/rails/application/finisher.rb:45:in `block in <module:Finisher>' 
/home/van/.rvm/gems/ruby-2.4.2/gems/railties-5.1.4/lib/rails/initializable.rb:30:in `instance_exec' 
/home/van/.rvm/gems/ruby-2.4.2/gems/railties-5.1.4/lib/rails/initializable.rb:30:in `run' 
/home/van/.rvm/gems/ruby-2.4.2/gems/railties-5.1.4/lib/rails/initializable.rb:59:in `block in run_initializers' 
/home/van/.rvm/gems/ruby-2.4.2/gems/railties-5.1.4/lib/rails/initializable.rb:58:in `run_initializers' 
/home/van/.rvm/gems/ruby-2.4.2/gems/railties-5.1.4/lib/rails/application.rb:353:in `initialize!' 
/home/van/FastMail/config/environment.rb:5:in `<top (required)>' 
/home/van/.rvm/gems/ruby-2.4.2/gems/activesupport-5.1.4/lib/active_support/dependencies.rb:292:in `require' 
/home/van/.rvm/gems/ruby-2.4.2/gems/activesupport-5.1.4/lib/active_support/dependencies.rb:292:in `block in require' 
/home/van/.rvm/gems/ruby-2.4.2/gems/activesupport-5.1.4/lib/active_support/dependencies.rb:258:in `load_dependency' 
/home/van/.rvm/gems/ruby-2.4.2/gems/activesupport-5.1.4/lib/active_support/dependencies.rb:292:in `require' 
/home/van/.rvm/gems/ruby-2.4.2/gems/railties-5.1.4/lib/rails/application.rb:329:in `require_environment!' 
/home/van/.rvm/gems/ruby-2.4.2/gems/railties-5.1.4/lib/rails/application.rb:445:in `block in run_tasks_blocks' 
/home/van/.rvm/gems/ruby-2.4.2/gems/rake-12.1.0/exe/rake:27:in `<top (required)>' 
/home/van/.rvm/gems/ruby-2.4.2/bin/ruby_executable_hooks:15:in `eval' 
/home/van/.rvm/gems/ruby-2.4.2/bin/ruby_executable_hooks:15:in `<main>' 
Tasks: TOP => db:migrate => environment 
(See full trace by running task with --trace) 

Bien que u peut voir que j'ai créé la méthode [] dans facebook.rb, je ne sais pas quel mal

Répondre

0

ok , j'ai trouvé une façon, il suffit de supprimer FACEBOOK_CONFIG dans le fichier omniauth et entrez le app_id et le secret directement.