2013-03-07 9 views
5

Quando faccio clic su [http://127.0.0.1:3000/auth/twitter], ottengo OAuth :: Non autorizzato 401 Errore non autorizzato nei binari. Sto seguendo Railscast video # 241 per l'autenticazione di Twitter con la mia applicazione rotaie. Ho cercato su Google molto ma non ho trovato risposta.OAuth :: Non autorizzato 401 Non autorizzato per omniauth-twitter in rotaie

Info regarding app on twitter: 
Callback URL: [http://127.0.0.1:3000/auth/twitter/callback] 
Website: [http://127.0.0.1:3000] 


### omniauth.rb 
Rails.application.config.middleware.use OmniAuth::Builder do 
    # provider :developer unless Rails.env.production? 
    provider :twitter, ENV['75UOAIDmKrRXvXKBhNvKA'], ENV['GrIaBI0tQy2TtjOtaFL9VxT6s9qq1sV7h9yRaZW4A'] 
end 

### routes.rb 
Chilli::Application.routes.draw do 
    resources :posts 
    root :to => 'posts#index' 
    #match '/auth/:twitter/callback' => 'sessions#create', :as => :auth_callback 
    match 'auth/twitter/callback', to: 'sessions#create' 
end 

### application.html.erb 
<div id="user_nav"> 
<%= link_to "Sign in with Twitter", "/auth/twitter"%> 
</div> 

### sessions_controller.rb 
class SessionsController < ApplicationController 
    def create 
    user = User.from_omniauth(env['omniauth.auth']) 
    session[:user_id] = user.id 
    redirect_to root_url, notice: "Signed in." 
    end 
end 

### user.rb 
class User < ActiveRecord::Base 
    attr_accessible :name, :provider, :uid 
    def self.from_omniauth(auth) 
    where(auth.slice("provider", "uid")).first || create_from_omniauth(auth) 
    end 

    def self.create_from_omniauth(auth) 
    create! do |user| 
     user.provider = auth["provider"] 
     user.uid = auth["uid"] 
     user.name = auth["info"]["nickname"] 
    end 
    end 
end 
+0

Hai controllato le impostazioni delle applicazioni a twitter.com? Assicurati di avere qualsiasi URL come callback. –

risposta

12

In omniauth.rb qual è
ENV['75UOAIDmKrRXvXKBhNvKA'], ENV['GrIaBI0tQy2TtjOtaFL9VxT6s9qq1sV7h9yRaZW4A']?

Se 75UOAIDmKrRXvXKBhNvKA e GrIaBI0tQy2TtjOtaFL9VxT6s9qq1sV7h9yRaZW4A sono la vostra APP_ID e APP_SECRET allora dovrebbe essere scritto come:

provider :twitter, '75UOAIDmKrRXvXKBhNvKA', 'GrIaBI0tQy2TtjOtaFL9VxT6s9qq1sV7h9yRaZW4A' 
+0

@varunvlalan, mi sono stancato del tuo suggerimento, ma ho ottenuto lo stesso errore. Non so cosa fare? –

+1

Un'altra cosa che ho notato in _routes.rb_ 'corrisponde 'auth/twitter/callback', a: 'sessions # create'' Prepend path con"/". 'match '/ auth/twitter/callback', a: 'sessions # create'' – varunvlalan

+0

@VSiingh qual è stato il problema? – OnkelK

1

Ho avuto lo stesso problema, quello risolto il mio problema era:

Modifica:

ENV['75UOAIDmKrRXvXKBhNvKA'],ENV['GrIaBI0tQy2TtjOtaFL9VxT6s9qq1sV7h9yRaZW4A'] 

a:

'75UOAIDmKrRXvXKBhNvKA', 'GrIaBI0tQy2TtjOtaFL9VxT6s9qq1sV7h9yRaZW4A' 

e mettendo un '/' prima 'auth' qui:

match '/auth/:provider/callback', to: 'sessions#create', via: 'get' 
match '/auth/failure', to: redirect('/'), via: 'get'