【问题标题】:No route matches [GET] "/auth/twitter/"没有路线匹配 [GET] "/auth/twitter/"
【发布时间】:2013-12-18 12:31:07
【问题描述】:

在尝试访问“/auth/twitter”时,我遇到了一个典型的omniauth 问题。

其他解决方案的问题是我无法从 user.rb 中删除 :omniauthable,因为 facebook 身份验证不起作用。

另外,如果我删除下面的设计行,twitter 身份验证将起作用。好像twitter和facebook的omniauth存在兼容性问题,有没有人有解决办法?

谢谢

devise.rb

require "omniauth-facebook"
config.omniauth :facebook, FACEBOOK_APP_ID, FACEBOOK_APP_SECRET

宝石文件

# Users from facebook
gem 'omniauth'
gem 'omniauth-facebook'

omniauth.rb

OmniAuth.config.logger = Rails.logger 

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :twitter, TWITTER_CONSUMER_KEY, TWITTER_CONSUMER_SECRET
end

models/user.rb

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable, 
         :confirmable, :omniauthable, omniauth_providers: [:facebook]
end

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4 omniauth


    【解决方案1】:

    当您将 OmniAuth 与 Devise 结合使用时,您必须在 devise.rb 文件中配置 OmniAuth 提供程序。

    所以你应该像配置omniauth-facebook gem 一样配置omniauth-twitter gem:

    Devise.setup do |config|
      config.omniauth :facebook, "FACEBOOK_KEY", "FACEBOOK_SECRET"
      config.omniauth :twitter, "TWITTER_KEY", "TWITTER_SECRET"
    end
    

    您还可以从代码中删除以下内容:

    1. Gemfile 中的 omniauth gem。

    2. devise.rb 文件中的 require "omniauth-facebook" 语句。

    3. omniauth_providers: [:facebook] 散列在您的 user.rb 文件中。

    【讨论】:

    • 感谢您的回答。它在大多数情况下都有效,除了我将 link_to [...], 'auth/twitter' 更改为 link_to [...], user_omniauth_authorize_path(:twitter) 。
    猜你喜欢
    • 2014-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-15
    • 2011-12-11
    • 2015-09-27
    • 2015-10-15
    相关资源
    最近更新 更多