2011-11-25 37 views
8

Tôi đã cài đặt omniauth 1.0. Ngoài ra tôi có oauth-0.4.5, oauth2-0.5.1, omniauth-facebook-1.0.0, omniauth-twitter-0.0.6.omniauth OAuthException & OAuth :: Không được phép

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 

Ngoài ra tôi thêm 'omniauth' 'omniauth-facebook' 'omniauth-twitter' đá quý để gemfile

Có hai vấn đề:

  1. Khi tôi đi http://localhost:3000/auth/facebook tôi nhận được { "lỗi": { "message": "Thiếu thông số client_id", "type": "OAuthException" }}

Và vào liên kết graph.facebook.com/oauth/authorize?response_type=code & client_id = & redirect_uri = http% 3A% 2F% 2Flocalhost% 3A3000% 2Fauth% 2Ffacebook% 2Fcallback & phân tích cú pháp = truy vấn & phạm vi = email% 2Coffline_access% 2Cread_stream & display = popup Và không có client_id !!!

  1. Khi tôi đi đến http://localhost:3000/auth/twitter tôi nhận được OAuth :: trái phép

401 Unauthorized

Bất kỳ ý tưởng?

+0

có bạn giải quyết các lỗi facebook? Nếu có, tôi có thể làm việc xung quanh không? Tôi nhận được thông báo lỗi tương tự. Nó có thể được giải quyết nếu tôi thêm bằng tay client_id để truy vấn tham số chuỗi – Vina

+1

@Vina ENV [] ngắt nó. Cố gắng chỉ sử dụng "". Ví dụ: nhà cung cấp: facebook, '167257285348131', 'c8c722f697scb2afcf1600286c6212a9' –

+1

Cảm ơn, nó hoạt động! Có vẻ như tôi cũng cần phải khởi động lại webrick. : D – Vina

Trả lời

15

Alex D. là đúng trong đó ENV [] phá vỡ nó. Để tạo omniauth.rb để nó sử dụng các phím khác nhau trong các môi trường khác nhau chỉ cần đặt:

provider :twitter, TWITTER_KEY, TWITTER_SECRET 

trong omniauth.rb

và sau đó trong các tập tin của bạn môi trường cấu hình (config/môi trường/development.rb vv) đặt khóa bạn muốn sử dụng cho môi trường đó.

config/môi trường/development.rb:

TWITTER_KEY = 'aaaaaaa' 
TWITTER_SECRET = 'aaaabbbbbb' 

config/môi trường/sản xuất.rb:

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

Tôi mang nó cho bạn thêm những tập tin này vào tập tin gitignore của bạn như nếu không có rất nhiều phím có sẵn cho bất cứ ai để xem trong repo của bạn? – Richlewis

+0

@ Jeff Steil: Đây có phải là cách tốt hơn để lưu trữ KEY và API_SECRET hoặc phương pháp tiếp cận biến môi trường không? Tôi biết đó là một chủ đề gây tranh cãi, nhưng vì tôi hiện là nhà phát triển duy nhất, cái nào là cách tốt hơn? –

0

Đã có vi phạm thay đổi được thực tại omniauth 1.0 - https://github.com/intridea/omniauth

OmniAuth 1.0 có một số thay đổi phá vỡ từ phiên bản 0.x. Bạn có thể đặt sự phụ thuộc vào ~> 0.3.2 nếu bạn không muốn nâng cấp thêm khó khăn. Xem wiki để biết thêm thông tin.

tôi sẽ cố gắng quay trở lại omniauth để 0.3.2:

gem install omniauth --version '~> 0.3.2' 

hoặc nếu bạn đang sử dụng bundler, trong Gemfile của bạn:

gem omniauth, '~> 0.3.2' 
+0

Tôi hoàn nguyên về 0.3.2. Đáng ngạc nhiên tôi có cùng một vấn đề. –

+0

Rất tiếc khi nghe điều đó. Tôi đã có một vấn đề tương tự trong khi trở lại, và quay trở lại 0.3.2 giải quyết nó cho tôi. Tôi muốn kiểm tra các bản ghi lịch sử trên các đá quý có liên quan khác, và chỉ cần chắc chắn rằng tất cả mọi thứ có vẻ ngọt ngào? – gef

+3

Cảm ơn bạn, nhưng tôi đã tìm thấy lý do trong omniauth.rb. Nếu không có ENV [] nó hoạt động. –

2

ENV['something']

nhìn vào môi trường của bạn vars cho "cái gì đó", vì vậy nó mong chờ

something='12345'

vì vậy bạn nên làm điều đó như thế

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

kiểm tra với

env 

và cập nhật cấu hình của bạn

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

nếu bạn sử dụng Heroku

heroku config:add AUTH_FB_KEY='....' 
Các vấn đề liên quan