2011-11-25 14 views
8

He instalado omniauth 1.0. También tengo oauth-0.4.5, oauth2-0.5.1, omniauth-facebook-1.0.0, omniauth-twitter-0.0.6.omniauth OAuthException y OAuth :: no autorizado

omniauth.rb 
Rails.application.config.middleware.use OmniAuth::Builder do 
    provider :developer unless Rails.env.production? 
    provider :facebook, ENV['167257285348131'],  ENV['c8c722f697scb2afcf1600286c6212a9'],  :scope => 'email,offline_access,read_stream', :display => 'popup' 
    provider :twitter, ENV['fma2L22ObJCW52QrL7uew'], ENV['4aZfhCAOdiS7ap8pHJ7I1OZslFwVWWLiAMVpYUI'] 

end 

session_controller.rb 
class SessionsController < ApplicationController 
require 'omniauth-facebook' 
require 'omniauth-twitter' 
require 'omniauth' 

def create 
    @user = User.find_or_create_from_auth_hash(auth_hash) 
    self.current_user = @user 
    redirect_to '/' 
end 



def auth_hash 
request.env['omniauth.auth'] 
end 

end 

También agrego 'OmniAuth' gemas 'OmniAuth-facebook' 'OmniAuth-twitter' a Gemfile

Hay dos problemas:

  1. Cuando voy http://localhost:3000/auth/facebook consigo { "error": { "mensaje": "Falta el parámetro client_id.", "tipo": "OAuthException" } }

Y el enlace graph.facebook.com/oauth/authorize?response_type=code & client_id = & redirect_uri = http% 3A% 2F% 2Flocalhost% 3A3000% 2Fauth% 2Ffacebook% 2Fcallback & parse = consulta & scope = email% 2Coffline_access% 2Cread_stream & display = popup Y no hay client_id !!!

  1. Cuando voy a http://localhost:3000/auth/twitter consigo OAuth :: autorizada

401 no autorizadas

¿Alguna idea?

+0

has solucionado el error de facebook? Si es así, ¿puedo solucionar el problema? Recibo el mismo mensaje de error. Se puede resolver si agregué manualmente el client_id para consultar los parámetros de cadena – Vina

+1

@Vina ENV [] lo rompe. Intenta usar "" solamente. Por ej .: proveedor: facebook, '167257285348131', 'c8c722f697scb2afcf1600286c6212a9' –

+1

¡Gracias, funciona! Parece que también necesito reiniciar el webrick. : D – Vina

Respuesta

15

Alex D. es correcto en que la ENV [] lo rompe. Para crear omniauth.rb para que utilice claves diferentes en diferentes entornos sólo hay que poner:

provider :twitter, TWITTER_KEY, TWITTER_SECRET 

en omniauth.rb

y luego en los archivos de configuración de entorno (config/ambientes/development.rb, etc.) coloque la clave que desea usar para ese entorno.

config/ambientes/development.rb:

TWITTER_KEY = 'aaaaaaa' 
TWITTER_SECRET = 'aaaabbbbbb' 

config/ambientes/producción.RB:

TWITTER_KEY = 'ccccccc' 
TWITTER_SECRET = 'ccccdddddd' 
+0

Supongo que añades estos archivos a tu archivo de gitignore ya que de lo contrario, hay muchas claves disponibles para que cualquiera pueda ver en tu repositorio. – Richlewis

+0

@Jeff Steil: ¿Es esta una mejor forma de almacenar KEY y API_SECRET o el enfoque de variables de entorno? Sé que es un tema discutible, pero dado que actualmente soy el único desarrollador, ¿cuál es la mejor manera? –

0

Ha habido romper los cambios realizados en OmniAuth 1,0 - https://github.com/intridea/omniauth

OmniAuth 1.0 tiene varios cambios de última hora a partir de la versión 0.x. Puede configurar la dependencia a ~> 0.3.2 si no desea realizar la actualización más difícil . Consulte wiki para obtener más información.

me gustaría tratar de volver a OmniAuth 0.3.2:

gem install omniauth --version '~> 0.3.2' 

o si está usando bundler, en su Gemfile:

gem omniauth, '~> 0.3.2' 
+0

Volví a 0.3.2. Sorprendente tengo los mismos problemas. –

+0

Ah, siento oír eso. Tuve un problema similar hace un tiempo, y volviendo a 0.3.2 lo resolví por mí. Revisaría los registros de historial de las otras gemas relevantes, y solo me aseguraría de que todo se vea dulce. – gef

+3

Gracias, pero encontré el motivo en omniauth.rb. Sin ENV [] funciona. –

2

ENV['something']

se ve en su entorno de vars "algo", por lo que sería de esperar

something='12345'

por lo que debe hacerlo así

export AUTH_FB_KEY='....' 
export AUTH_FB_SECRET='...' 

consultar con

env 

y actualizar su configuración

provider :facebook, ENV['AUTH_FB_KEY'], ENV['AUTH_FB_SECRET'] 

si utiliza heroku

heroku config:add AUTH_FB_KEY='....' 
Cuestiones relacionadas