Rails3 deviseomniauth twitter 配置

发布于 2025-01-07 20:41:03 字数 4889 浏览 4 评论 0原文

当我尝试访问 http://127.0.0.1:3000/auth/twitter 我得到关注错误:

Routing Error
No route matches [GET] "/auth/twitter

但我可以通过 - “/users/auth/twitter/” 到达它,但是我有一个错误的回调路径。

如何让 Twitter 身份验证使用正确的 url -“/auth/twitter”?下面,我发布了我的申请文件。我使用 Rails3、Devise、Omniauth

这是 rake 路由输出:

$ rake routes
         authentications GET    /authentications(.:format)             authentications#index
                         POST   /authentications(.:format)             authentications#create
      new_authentication GET    /authentications/new(.:format)         authentications#new
     edit_authentication GET    /authentications/:id/edit(.:format)    authentications#edit
          authentication GET    /authentications/:id(.:format)         authentications#show
                         PUT    /authentications/:id(.:format)         authentications#update
                         DELETE /authentications/:id(.:format)         authentications#destroy
              home_index GET    /home/index(.:format)                  home#index
        new_user_session GET    /users/sign_in(.:format)               devise/sessions#new
            user_session POST   /users/sign_in(.:format)               devise/sessions#create
    destroy_user_session DELETE /users/sign_out(.:format)              devise/sessions#destroy
  user_omniauth_callback        /users/auth/:action/callback(.:format) devise/omniauth_callbacks#(?-mix:(?!))
           user_password POST   /users/password(.:format)              devise/passwords#create
       new_user_password GET    /users/password/new(.:format)          devise/passwords#new
      edit_user_password GET    /users/password/edit(.:format)         devise/passwords#edit
                         PUT    /users/password(.:format)              devise/passwords#update
cancel_user_registration GET    /users/cancel(.:format)                devise/registrations#cancel
       user_registration POST   /users(.:format)                       devise/registrations#create
   new_user_registration GET    /users/sign_up(.:format)               devise/registrations#new
  edit_user_registration GET    /users/edit(.:format)                  devise/registrations#edit
                         PUT    /users(.:format)                       devise/registrations#update
                         DELETE /users(.:format)                       devise/registrations#destroy
       user_confirmation POST   /users/confirmation(.:format)          devise/confirmations#create
   new_user_confirmation GET    /users/confirmation/new(.:format)      devise/confirmations#new
                         GET    /users/confirmation(.:format)          devise/confirmations#show
                   users GET    /users(.:format)                       users#index
                         POST   /users(.:format)                       users#create
                new_user GET    /users/new(.:format)                   users#new
               edit_user GET    /users/:id/edit(.:format)              users#edit
                    user GET    /users/:id(.:format)                   users#show
                         PUT    /users/:id(.:format)                   users#update
                         DELETE /users/:id(.:format)                   users#destroy
                                /auth/:provider/callback(.:format)     authentications#create
                    root        /       

                           home#index

我的omniauth.rb:

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

Gemfile:

source 'https://rubygems.org'

gem 'rails', '3.2.1'

gem 'mysql2'
gem 'devise'
gem 'cancan'
gem 'omniauth'
gem 'omniauth-twitter'
gem 'nifty-generators'

group :assets do
  gem 'sass-rails',   '~> 3.2.3'
  gem 'coffee-rails', '~> 3.2.1'

  gem 'uglifier', '>= 1.0.3'
end

gem 'jquery-rails'

gem "mocha", :group => :test

routes.rb

RaritySoft::Application.routes.draw do

  resources :authentications

  get "home/index"

  devise_for :users
  resources :users

  match '/auth/:provider/callback' => 'authentications#create'

  root :to => 'home#index'
end

User.rb

class User < ActiveRecord::Base

  has_many :authentications

  # Include default devise modules. Others available are:
  # :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable, :confirmable, :omniauthable

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

When I try to reach http://127.0.0.1:3000/auth/twitter I get following error:

Routing Error
No route matches [GET] "/auth/twitter

But I can reach it via - "/users/auth/twitter/" but then I have a wrong callback path.

How to get Twitter auth work with correct url - "/auth/twitter" ? Below, I have posted my application files. I use Rails3, Devise, Omniauth

This is rake routes output:

$ rake routes
         authentications GET    /authentications(.:format)             authentications#index
                         POST   /authentications(.:format)             authentications#create
      new_authentication GET    /authentications/new(.:format)         authentications#new
     edit_authentication GET    /authentications/:id/edit(.:format)    authentications#edit
          authentication GET    /authentications/:id(.:format)         authentications#show
                         PUT    /authentications/:id(.:format)         authentications#update
                         DELETE /authentications/:id(.:format)         authentications#destroy
              home_index GET    /home/index(.:format)                  home#index
        new_user_session GET    /users/sign_in(.:format)               devise/sessions#new
            user_session POST   /users/sign_in(.:format)               devise/sessions#create
    destroy_user_session DELETE /users/sign_out(.:format)              devise/sessions#destroy
  user_omniauth_callback        /users/auth/:action/callback(.:format) devise/omniauth_callbacks#(?-mix:(?!))
           user_password POST   /users/password(.:format)              devise/passwords#create
       new_user_password GET    /users/password/new(.:format)          devise/passwords#new
      edit_user_password GET    /users/password/edit(.:format)         devise/passwords#edit
                         PUT    /users/password(.:format)              devise/passwords#update
cancel_user_registration GET    /users/cancel(.:format)                devise/registrations#cancel
       user_registration POST   /users(.:format)                       devise/registrations#create
   new_user_registration GET    /users/sign_up(.:format)               devise/registrations#new
  edit_user_registration GET    /users/edit(.:format)                  devise/registrations#edit
                         PUT    /users(.:format)                       devise/registrations#update
                         DELETE /users(.:format)                       devise/registrations#destroy
       user_confirmation POST   /users/confirmation(.:format)          devise/confirmations#create
   new_user_confirmation GET    /users/confirmation/new(.:format)      devise/confirmations#new
                         GET    /users/confirmation(.:format)          devise/confirmations#show
                   users GET    /users(.:format)                       users#index
                         POST   /users(.:format)                       users#create
                new_user GET    /users/new(.:format)                   users#new
               edit_user GET    /users/:id/edit(.:format)              users#edit
                    user GET    /users/:id(.:format)                   users#show
                         PUT    /users/:id(.:format)                   users#update
                         DELETE /users/:id(.:format)                   users#destroy
                                /auth/:provider/callback(.:format)     authentications#create
                    root        /       

                           home#index

my omniauth.rb:

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

Gemfile:

source 'https://rubygems.org'

gem 'rails', '3.2.1'

gem 'mysql2'
gem 'devise'
gem 'cancan'
gem 'omniauth'
gem 'omniauth-twitter'
gem 'nifty-generators'

group :assets do
  gem 'sass-rails',   '~> 3.2.3'
  gem 'coffee-rails', '~> 3.2.1'

  gem 'uglifier', '>= 1.0.3'
end

gem 'jquery-rails'

gem "mocha", :group => :test

routes.rb

RaritySoft::Application.routes.draw do

  resources :authentications

  get "home/index"

  devise_for :users
  resources :users

  match '/auth/:provider/callback' => 'authentications#create'

  root :to => 'home#index'
end

User.rb

class User < ActiveRecord::Base

  has_many :authentications

  # Include default devise modules. Others available are:
  # :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable, :confirmable, :omniauthable

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

空城仅有旧梦在 2025-01-14 20:41:03

我已经删除了 :omniauthable 现在一切正常

I have removed :omniauthable and everything now works fine

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文