Tengo una aplicación simple con un modelo de usuario y un sistema de autenticación creado desde cero. Ahora estoy tratando de usar Devise, y no funciona, y como novato en desarrollo web, hay algo que no entiendo y no sé cómo depurar esto.Idear: el inicio de sesión falla, ¿cómo depurarlo?
Mi problema es: Devise está instalado y funciona, excepto que el inicio de sesión siempre devuelve "correo electrónico no válido o contraseña", incluso si ambos campos son correctos.
He desarrollado una aplicación vacía, he añadido Devise, y no tengo este problema. El problema, probablemente, se deba a que intento agregar Devise a un modelo de Usuario existente.
He leído el documento y la wiki Devise, que tiene un tema sobre este tema: here. dice eliminar: database_authenticatable de los campos de migración, porque el modelo de usuario ya tiene un campo de correo electrónico y reemplazarlo con t.encrypted_password, lo cual hice en la migración.
Ahora, en mi modelo de usuario, dejé: database_authenticatable en attr_accessible. Si lo elimino, tengo muchos mensajes de error de que session_path no se reconoce, etc., pero no se ha migrado. Además,: encrypted_password no aparece en ningún lugar de mi modelo, ¿esto es normal? ...
Sé que es realmente una pregunta para novatos, estoy un poco perdido y no sé si debería volver a escribir mi aplicación de el inicio o si hay una solución fácil ... No sé cómo depurar también, todo lo que veo en los registros es que "no autorizado" aparece cuando el usuario debe iniciar sesión con éxito, y también que "authentication_token" no es el mismo cuando se trata de sign_in que la generada una vez que se ha registrado
así, estoy perdido, si parece obvio para usted, estaría contento de escuchar algún consejo ...
añado por debajo de la routes.rb, User.rb, schema.rb y archivo de migración
routes.rb:
TapaG::Application.routes.draw do
devise_for :users
get "pages/home"
resources :users
resources :belongings
devise_scope :user do
get "sign_in", :to => "devise/sessions#new"
get "sign_out", :to => "devise/sessions#destroy"
get "sign_up", :to => "devise/registrations#new"
end
get "pages/more_details"
get "pages/infos_pratiques"
get "pages/contact_us"
#match 'Profil', :to => 'users#Profil'
match "more_details", :to => "pages#more_details"
match 'contact_us', :to => 'pages#contact_us'
match "infos_pratiques", :to => "pages#infos_pratiques"
match '/belongings/new', :to => 'belongings#new'
root :to => 'pages#home'
migración:
class AddDeviseToUsers < ActiveRecord::Migration
def self.up
change_table(:users) do |t|
t.recoverable
t.rememberable
t.trackable
t.encrypted_password :null => false, :default => '', :limit => 128
# t.encryptable
# t.confirmable
# t.lockable :lock_strategy => :failed_attempts, :unlock_strategy => :both
# t.token_authenticatable
# Uncomment below if timestamps were not included in your original model.
# t.timestamps
end
add_index :users, :email, :unique => true
add_index :users, :reset_password_token, :unique => true
# add_index :users, :confirmation_token, :unique => true
# add_index :users, :unlock_token, :unique => true
# add_index :users, :authentication_token, :unique => true
end
def self.down
# By default, we don't want to make any assumption about how to roll back a migration when your
# model already existed. Please edit below which fields you would like to remove in this migration.
raise ActiveRecord::IrreversibleMigration
end
end
User.rb:
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
devise :registerable, #:database_authenticatable,
:recoverable, :rememberable, :trackable, :validatable
# Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation, :remember_me
attr_accessor :password
attr_accessible :name, :number_of_positive_reco, :confidence_percent, :avatar
schema.rb:
create_table "users", :force => true do |t|
t.string "name"
t.string "email"
t.integer "number_of_positive_reco"
t.float "confidence_percent"
t.datetime "created_at"
t.datetime "updated_at"
t.string "encrypted_password"
t.string "salt"
t.string "avatar_file_name"
t.string "avatar_content_type"
t.integer "avatar_file_size"
t.datetime "avatar_updated_at"
t.boolean "admin", :default => false
t.string "reset_password_token"
t.datetime "reset_password_sent_at"
t.datetime "remember_created_at"
t.integer "sign_in_count", :default => 0
t.datetime "current_sign_in_at"
t.datetime "last_sign_in_at"
t.string "current_sign_in_ip"
t.string "last_sign_in_ip"
end
add_index "users", ["email"], :name => "index_users_on_email", :unique => true
add_index "users", ["reset_password_token"], :name => "index_users_on_reset_password_token", :unique => true
En realidad, Devise no hace ningún cifrado de contraseña (la contraseña encriptada y la sal se establecen en NIL después de que el usuario se registre) ... – citraL
Ahhh, lo conseguí, gracias por una explicación :) – socjopata