2016-12-01 11 views
0

Как говорится в названии, я правильно регистрируюсь с использованием поля имени пользователя и пароля в разработке. Однако, когда я пытаюсь войти в систему, отображается 'Invalid Email, Login or password'. Имя пользователя хранится, как показано на консоли рельсы, однако пароль не шифруется и не показаны здесь:Удостоверение регистрации успешно, логин неудачно

=> #<ActiveRecord::Relation [#<User id: 9, email: "", created_at: "2016-12-01 16:32:20", updated_at: "2016-12-01 16:32:20", username: "benjamin">]> 

Контроллер Применение:

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 

Мои файлы DB применимы:

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 

Тем не менее, 'недействителен, адрес электронной почты, Логин или пароль'

ответ

0

В здесь:

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

Вы не используете переменную added_attrs. Я предполагаю, что вам нужно также разрешить эти поля.

+0

Что я должен изменить? Я попытался настроить параметры и отобразить их выше, в моем отредактированном сообщении. К сожалению, все еще не работает. – Benjamints

+0

Все еще не работает, к сожалению. – Benjamints

+0

Если вы заходите в консоль и запускаете 'User.create username: 'whatever', password: 'password'', что вы получаете? Сохраняет ли пароль? Можете ли вы войти на сайт с этим пользователем после этого? – Brad

Смежные вопросы