2016-12-01 5 views
0

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'

Antwort

0

In hier:

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

Sie verwenden nicht die Variable added_attrs. Ich schätze, Sie müssen diese Felder auch zulassen.

+0

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

+0

Immer noch nicht funktioniert. – Benjamints

+0

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

Verwandte Themen