Rails:设计返回“无效策略......”

时间:2011-02-08 01:32:54

标签: ruby-on-rails routes devise

不确定这里发生了什么,因为Devise 直到最近才开始工作。

简而言之,我已将Devise配置为与Omniauth配合使用。当我尝试运行本地服务器时,我遇到了一些问题。

终端发出警告:

You provided devise_for :users but there is no model User defined in your application

当我尝试在浏览器中实际访问该网站时,我得到:

Invalid strategy rememberable

我已经检查了我的用户模型,设计了初始化程序和路由,但似乎都检查了。我还验证了我的数据库中存在的表,并且可以访问。以下是单个文件:

User.rb

class User < ActiveRecord::Base
  devise :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :twitter_oauth, :oauthable

  attr_accessible :email, :password, :password_confirmation, :remember_me

  def apply_omniauth(omniauth)
    case omniauth['provider']
    when 'facebook'
      self.apply_facebook(omniauth)
    when 'open_id'
      self.email = omniauth['user_info']['email'] if email.blank?
    end
    authentications.build(:provider => omniauth['provider'], :uid => omniauth['uid'], :token =>(omniauth['credentials']['token'] rescue nil))
  end

  def facebook
    @fb_user ||= FbGraph::User.me(self.authentications.find_by_provider('facebook').token)
  end

  def password_required?
    (authentications.empty? || !password.blank?) && super
  end

  protected

    def apply_facebook(omniauth)
      if (extra = omniauth['extra']['user_hash'] rescue false)
        self.email = (extra['email'] rescue '')
      end
    end
end

设计初始化程序

Devise.setup do |config|
  config.mailer_sender = "please-change-me@config-initializers-devise.com"
  require 'devise/orm/active_record'
  config.stretches = 10
  config.pepper = "..."
end

的routes.rb

Project::Application.routes.draw do
  match '/auth/:provider/callback' => 'authentications#create'

  devise_for :users, :controllers => {:registrations => 'registrations'}
  resources :authentications
end

1 个答案:

答案 0 :(得分:0)

我也在我的http://eq2mission.flame.org/网站上使用OmniAuth和Devise,所以我可以直接与之比较。

以下是我在使用和您的使用之间可以看到的差异:

(1)我没有以下设计标志:twitter_oauth或:在我的用户模型中可以使用。

(2)我确实设计了:在我的用户模型中可以验证。

除此之外,看起来我们都是从公共基础开始的,因为代码非常相似。