Wie der Titel sagt, melde ich mich korrekt mit dem Feld Benutzername und Passwort in devise an. Wenn ich mich jedoch anmelde, wird 'Invalid Email, Login or password'
angezeigt. Der Benutzername wird auf den Schienen Konsole gesehen gespeichert, jedoch wird das Passwort hier nicht verschlüsselt oder gezeigt:Anmeldung erfolgreich abschließen, Anmeldung fehlgeschlagen
=> #<ActiveRecord::Relation [#<User id: 9, email: "", created_at: "2016-12-01 16:32:20", updated_at: "2016-12-01 16:32:20", username: "benjamin">]>
Application Controller:
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
before_action :authenticate_user!
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
added_attrs = [:username, :email, :password, :password_confirmation, :remember_me]
devise_parameter_sanitizer.permit :sign_up, keys: [:username, :password]
devise_parameter_sanitizer.permit :account_update, keys: [:username, :password]
end
end
User.rb:
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
has_many :stories
validates :username, :presence => true, :uniqueness => { :case_sensitive => false}
validates_format_of :username, with: /^[a-zA-Z0-9_\.]*$/, :multiline => true
attr_accessor :login
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable, :authentication_keys => {email: true, login: false}
def self.find_for_database_authentication(warden_conditions)
conditions = warden_conditions.dup
if login = conditions.delete(:login)
where(conditions.to_h).where(["lower(username) = :value OR lower(email) = :value", { :value => login.downcase }]).first
elsif conditions.has_key?(:username) || conditions.has_key?(:email)
where(conditions.to_h).first
end
end
def email_required?
false
end
def email_changed?
false
end
end
Meine DB-Dateien relevant:
class DeviseCreateUsers < ActiveRecord::Migration[5.0]
def change
create_table :users do |t|
## Database authenticatable
t.string :email, null: false, default: ""
t.string :encrypted_password, null: false, default: ""
## Recoverable
t.string :reset_password_token
t.datetime :reset_password_sent_at
## Rememberable
t.datetime :remember_created_at
## Trackable
t.integer :sign_in_count, default: 0, null: false
t.datetime :current_sign_in_at
t.datetime :last_sign_in_at
t.string :current_sign_in_ip
t.string :last_sign_in_ip
## Confirmable
# t.string :confirmation_token
# t.datetime :confirmed_at
# t.datetime :confirmation_sent_at
# t.string :unconfirmed_email # Only if using reconfirmable
## Lockable
# t.integer :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts
# t.string :unlock_token # Only if unlock strategy is :email or :both
# t.datetime :locked_at
t.timestamps null: false
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
end
end
/
class RemoveEmailUniquenessFromUser < ActiveRecord::Migration[5.0]
def change
change_column :users, :email, :string, unique: false
end
end
/
class RemoveIndexFromUsersEmail < ActiveRecord::Migration[5.0]
def change
remove_index :users, :email
end
end
Edit:
I have changed devise params to:
def configure_permitted_parameters
added_attrs = [:username, :email, :password, :password_confirmation, :remember_me]
devise_parameter_sanitizer.permit :sign_in, keys: [:username, :password]
devise_parameter_sanitizer.permit :sign_up, keys: [:username, :password, :password_confirmation]
devise_parameter_sanitizer.permit :account_update, keys: [:username, :password, :password_confirmation]
end
Noch 'ungültig, E-Mail, Login oder Passwort'
Was soll ich ändern? Ich habe versucht, die Parameter zu konfigurieren und sie oben in meinem bearbeiteten Post anzuzeigen. Leider funktioniert immer noch nicht. – Benjamints
Immer noch nicht funktioniert. – Benjamints
Wenn Sie in die Konsole gehen und 'User.create username:' whatever 'ausführen, Passwort:' password', was bekommen Sie? Speichert das das Passwort? Können Sie sich danach mit diesem Benutzer auf der Website anmelden? – Brad