2016-04-21 115 views
1

我试图安装omniauth-twitter并遇到一些问题,主要是上面列出的一个问题。起初,我没有这个问题,但现在我这样做,我挠了脑袋,为什么这件事情出现了。 我已将消费者密钥和密钥放置在secrets.yml文件中,并且也位于我的omniauth.rb文件中,如下所示。我已经阅读了很多关于是否需要该文件的冲突信息,并且所有这些信息都进入了devise.rb文件。我没有更改或在我的devise.rb文件中放置任何对omniauth的引用。我还确保将相应的url回调链接(http://127.0.0.1:3000/auth/twitter/callback)置于twitter开发者网站中。路由错误 - 没有路由匹配[GET]“/ auth/twitter”Omniauth-twitter与devise gem

这里是我的代码 -

的routes.rb

Rails.application.routes.draw do 


    get "/auth/:provider/callback" => "social_logins#create" 

    devise_for :users, :controllers => { registrations: 'registrations' } 



    resources :users 
    resources :events do 

    resources :bookings 
    end 
    # get 'welcome/index' 


    authenticated :user do 
    root 'events#index', as: "authenticated_root" 
    end 


    root 'welcome#index' 


end 

social_logins.controller.rb

class SocialLoginsController < ApplicationController 
    def create 


    @details = request.env["omniauth.auth"].to_yaml 

    @provider = @details["provider"] 
    @provider_id = @details["uid"] 

    @user = User.where(provider: @provider, provider_id: @provider_id).first 

    if @user.present? 
     #sign them in 
    else 
     # make a new user 
     @user = User.new 
     @user.provider = @provider 
     @user.provider_id = @provider_id 

     # because of has_secure_password - will this work? 
     @user.password = "AAAAAA!!" 
     @user.password_confirmation = "AAAAAA!!" 

     # let's save the key and secret 
     @user.key = @details["credentials"]["token"] 
     @user.secret = @details["credentials"]["secret"] 

     # lets fill in their details 
     @user.name = @details["info"]["name"] 
     @user.email = @details["info"]["email"] || "[email protected]" 

     @user.save! 
    end 


     session[:uid] = @user.id 
     flash[:success] = "You've logged in" 
     redirect_to root_path 
    end 

end 

index.html.erb

<header> 
<nav> 
      <div class="links"> 
       <%= link_to 'Sign up', new_user_registration_path %> 
       <%= link_to 'Sign in', new_user_session_path %> 
       <%= link_to 'Go to Events', events_path %> 
       <%= link_to "Log in with Twitter", "/auth/twitter" %> 
      </div> 

</nav>   


</header> 

omniauth.rb

Rails.application.config.middleware.use OmniAuth::Builder do 
provider :twitter, Rails.application.secrets.twitter_api_key, Rails.application.secrets.twitter_api_secret 
end 
+0

请为'rake routes | grep auth'提供输出 –

回答

0

您是否在用户模型中有此项?

devise omniauth_providers: [:twitter] 
相关问题