2013-03-07 20 views
5

Khi tôi nhấp vào [http://127.0.0.1:3000/auth/twitter], tôi nhận được lỗi OAuth :: Unauthorized 401 Lỗi trái phép trong đường ray. Tôi đang theo dõi video Railscast # 241 để xác thực Twitter bằng ứng dụng đường ray của tôi. Tôi đã googled rất nhiều cho nó nhưng không thể tìm thấy câu trả lời cho nó.OAuth :: Trái phép 401 Không được phép đối với omniauth-twitter trong đường ray

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

Bạn có kiểm tra cài đặt ứng dụng của bạn tại twitter.com? Đảm bảo bạn có bất kỳ URL nào dưới dạng gọi lại. –

Trả lời

12

Trong omniauth.rb là những gì
ENV['75UOAIDmKrRXvXKBhNvKA'], ENV['GrIaBI0tQy2TtjOtaFL9VxT6s9qq1sV7h9yRaZW4A']?

Nếu 75UOAIDmKrRXvXKBhNvKAGrIaBI0tQy2TtjOtaFL9VxT6s9qq1sV7h9yRaZW4AAPP_ID của bạn và APP_SECRET sau đó nó nên được viết như sau:

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

@varunvlalan, tôi mệt mỏi với đề nghị của bạn, nhưng nhận được lỗi tương tự. Bạn không biết phải làm gì? –

+1

Một điều nữa tôi nhận thấy trong _routes.rb_ 'match 'auth/twitter/callback', thành: 'sessions # create'' Đường dẫn đầu tiên với"/". 'kết hợp '/ auth/twitter/gọi lại', tới: 'phiên # tạo'' – varunvlalan

+0

@VSiingh vấn đề là gì? – OnkelK

1

tôi đã cùng một vấn đề, những gì cố định vấn đề của tôi là:

Thay đổi:

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

tới:

'75UOAIDmKrRXvXKBhNvKA', 'GrIaBI0tQy2TtjOtaFL9VxT6s9qq1sV7h9yRaZW4A' 

và đặt một '/' trước khi 'auth' ở đây:

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