Rails: Придумайте возвращение "Неверная стратегия ..." - PullRequest
1 голос
/ 08 февраля 2011

Не совсем уверен, что здесь произошло, поскольку 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

rout.rb

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

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

1 Ответ

0 голосов
/ 08 февраля 2011

Я также использую OmniAuth и Devise на своем http://eq2mission.flame.org/ сайте, поэтому у меня есть немало возможностей для прямого сравнения.

Вот различия, которые я вижу между моим и вашим использованием:

(1) У меня нет флагов разработки для: twitter_oauth или: oauthable в моей модели пользователя.

(2) У меня есть devise: validatable в моей модели пользователя.

Кроме того, похоже, что мы оба начали с общей базы, поскольку код очень похож.

...