2012-07-09 35 views
7

Tôi nhận (twitter) Authentication failure! invalid_credentials: OAuth::Unauthorized, 401 Unauthorized lỗi sau khi thăn thành công đến twitter và trang được chuyển hướng đến trang đăng nhậpXác thực thất bại: Vạch + OmniAuth + Twitter

Dưới đây là cấu hình ứng dụng

routes.rb

devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" } 

devise.rb

config.omniauth :twitter, "KEY", "SECRET" 

omniauth_callbacks_controller.rb

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController 
    def twitter 
    auth = env["omniauth.auth"] 
    Rails.logger.info("auth is **************** #{auth.to_yaml}") 
    @user = user = User.find_by_provider_and_uid(auth["provider"], auth["uid"]) || User.new 
    if @user.persisted? 
     flash[:notice] = I18n.t "devise.omniauth_callbacks.success" 
     sign_in_and_redirect @user, :event => :authentication 
    else 
     session["devise.twitter_uid"] = auth["uid"] 
     redirect_to new_user_registration_url 
    end 
    end 
end 

user.rb

class User < ActiveRecord::Base 
    # Include default devise modules. Others available are: 
    # :token_authenticatable, :confirmable, 
    # :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable, :omniauthable 

    # Setup accessible (or protected) attributes for your model 
    attr_accessible :email, :password, :password_confirmation, :remember_me, :provider, :uid 
    # attr_accessible :title, :body 
end 

index.html.erb

<h3>Home</h3> 

<%if user_signed_in? %> 
    <div><%="Welcome #{current_user.email}"%></div> 

<div><%=link_to "Logout", destroy_user_session_path, method: :delete%></div> 

<%else%> 
<div><%=link_to "Sign in twitter", user_omniauth_authorize_path(:twitter)%></div> 
<%end%> 

điều khiển đăng nhập

Started GET "https://stackoverflow.com/users/auth/twitter" for 127.0.0.1 at 2012-07-09 18:58:16 +0530 
(twitter) Callback phase initiated. 
(twitter) Callback phase initiated. 
(twitter) Authentication failure! invalid_credentials: OAuth::Unauthorized, 401 Unauthorized 

Started GET "https://stackoverflow.com/users/auth/twitter/callback?oauth_token=rLCEqgAWPtoIzce475sacKwoqU5baEdz0JnmldXE&oauth_verifier=xYPoz2LZGHQlmz4akoVGkarPtZTebCOmeWzPUqLcPA" for 127.0.0.1 at 2012-07-09 18:58:48 +0530 
Processing by Users::OmniauthCallbacksController#failure as HTML 
    Parameters: {"oauth_token"=>"rLCEqgAWPtoIzce475sacKwoqU5baEdz0JnmldXE", "oauth_verifier"=>"xYPoz2LZGHQlmz4akoVGkarPtZTebCOmeWzPUqLcPA"} 
Redirected to http://localhost:3000/users/sign_in 

URL Callback trong dev.twitter.com Trước đó nó đã http://127.0.0.1:3000. Từ Devise, Omniauth and Twitter Tôi đã đổi số này thành http://127.0.0.1:3000/auth/twitter/callback nhưng vẫn gặp lỗi

Có ai vui lòng trợ giúp ở đây để khắc phục sự cố không?

Cảm ơn, Amit Patel

+0

Bạn có khóa và bí mật chính xác trong 'devise.rb' không? –

+0

Có. Tôi đã cấu hình nó đúng cách. Hôm nay tôi đã xác định được sự cố. Tôi cũng đã cấu hình cào như đề xuất trong câu trả lời dưới đây. Tôi chỉ đơn giản là loại bỏ omniauth.rb và khởi động lại máy chủ và nó bắt đầu làm việc. –

Trả lời

21

Tôi đã tìm thấy sự cố. Tôi đã định cấu hình các nhà cung cấp trong cả hai devise.rbomniauth.rb. Tôi chỉ cần xóa omniauth.rb và nó bắt đầu hoạt động.

+3

Wow làm thế nào một người chết phải biết điều đó? Nên có một môn thể thao Thế vận hội mới, gỡ lỗi xtreme. –

+0

Wow; lỗi thú vị, nếu nó là? Tại sao cái này rất? Tại sao lại có một biến chứng nếu bạn có cả tệp cấu hình 'devise.rb' và' omniauth.rb'? –

+0

Thật tuyệt vời!Cảm ơn bạn đã trả lời tự động: D –

1

Hãy thử đặt mã KEY twitter của bạn trong một tập tin trong thư mục omniauth.rb initilizers của bạn. Như thế này:

Rails.application.config.middleware.use OmniAuth::Builder do 
    provider :twitter, 'KEY', 'SECRET' 
end 

mỗi: https://github.com/intridea/omniauth Xác thực với twitter, sau khi tất cả, đi qua omniauth, không phát sinh.

Chúc may mắn! @thatdankent

+0

cảm ơn @thatdanketnt. Tôi đã tìm ra vấn đề. Tôi cũng đã cấu hình omniauth rake middleware giống như bạn đã gợi ý. Tôi chỉ đơn giản là loại bỏ omniauth.rb và nó đã làm việc với tôi. –

Các vấn đề liên quan