Ich habe ein voll funktionsfähiges Authentifizierungssystem mit einer Benutzertabelle, die über fünfzig Spalten hat. Es ist einfach, aber es tut Hash-Verschlüsselung mit Salz, verwendet E-Mail anstelle von Benutzernamen und hat zwei verschiedene Arten von Benutzern mit einem Administrator.Die Devise-Authentifizierung in eine bereits vorhandene Benutzerstruktur integrieren?
Ich möchte Devise-Authentifizierung in meine Anwendung integrieren, um die zusätzlichen Teile wie E-Mail-Validierung, vergessene Passwörter, Erinnerungs-Tokens usw. zu verstärken. Ich wollte nur sehen, ob jemand Rat oder Probleme hat. Bei der Integration von Devise in eine bereits vorhandene Benutzerstruktur Die wesentlichen Felder in meinem Benutzermodell sind:
t.string :first_name, :null => false
t.string :last_name, :null => false
t.string :email, :null => false
t.string :hashed_password
t.string :salt
t.boolean :is_userA, :default => false
t.boolean :is_userB, :default => false
t.boolean :is_admin, :default => false
t.boolean :active, :default => true
t.timestamps
Zum Vergleich willen, ist hier die Devise Felder aus der Migration:
t.database_authenticatable :null => false
t.confirmable
t.recoverable
t.rememberable
t.trackable
add_index "users", ["confirmation_token"], :name => "index_users_on_confirmation_token", :unique => true
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
, die schließlich in diese tatsächlichen Felder im Schema drehen:
t.string "email", :default => "", :null => false
t.string "encrypted_password", :limit => 128, :default => "", :null => false
t.string "password_salt", :default => "", :null => false
t.string "confirmation_token"
t.datetime "confirmed_at"
t.datetime "confirmation_sent_at"
t.string "reset_password_token"
t.string "remember_token"
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"
t.datetime "created_at"
t.datetime "updated_at"
Was empfehlen Sie? Entferne ich einfach E-Mail, hashed_password und salt von meiner Migration und lege die 5 Devise-Migrationsfelder ein und alles wird OK oder muss ich etwas anderes tun?
EDIT:
Ich habe angefangen, dies selbst zu versuchen und haben bereits in einige Probleme laufen. Ich fügte hinzu, die devise Migration Felder ich oben auf meinem vorhandenen Benutzermodell zeigte, und wenn ich jetzt meine Samen Datei ausführen, es gibt mir diese Postgresql Fehler:
ERROR: duplicate key value violates unique constraint "index_users_on_email"
Meine Samen-Datei:
initial_usersA = User.create!(
[
{
:first_name => "John",
:last_name => "Doe",
:email => "[email protected]",
:is_userA => true,
:is_userB => false,
:is_admin => true,
:password => "password",
:password_confirmation => "password"
},
{
:first_name => "Jane",
:last_name => "Smith",
:email => "[email protected]",
:is_userA => true,
:is_userB => false,
:is_admin => true,
:password => "password",
:password_confirmation => "password"
}
User-Modell :
devise :registerable, :authenticatable, :recoverable,
:rememberable, :trackable, :validatable
attr_accessor :password_confirmation, :email, :password
der Stack-Trace zeigt, dass die E-Mail scheinbar nicht mit dem Rest der Variablen aus irgendeinem Grund eingespeist wird ... wenn alles andere in der seed-Datei zeigt in der actua up Ich Frage, die E-Mail ist '' aus irgendeinem Grund, obwohl es explizit definiert ist.auth
Diese Seite hat ein Wiki-How-to kann hilfreich sein. https://github.com/plataformatec/devise/wiki/How-To:-change-an-ready-existing-table-to-add-devise-required-columns – GeorgeW