2016-10-17 1 views
0

У меня есть контроллер Сессии, который требует проверки подлинности для создания сеанса с помощью метода .authenticate из has_secure_password, определенной в модели пользователя, согласно ниже:Пропустить Аутентифицировать в Rails

Редактировать:

class User < ApplicationRecord 
before_save { self.email = email.downcase } 

# Relationships 
has_secure_password 
has_many :pedidos 

# Validations 
VALID_EMAIL_REGEX = /\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z/i 
validates :nome, presence: true 
validates :empresa, presence: true 
validates :email, presence: true, length: { maximum: 255 },  
       format: { with: VALID_EMAIL_REGEX } 
validates :cpf, presence: true, length: { minimum: 11, maximum: 14 } 
validates :password, presence: true, length: { minimum: 6 }  

def admin? 
    self.admin 
end 
end 

SessionsController

def create 
    user = User.find_by(email: params[:sessions][:email]) 
    if user && user.authenticate(params[:sessions][:password]) 
     flash[:success] = "Seja bem vindo(a), #{user.nome}!"    
     session[:user_id] = user.id 
     redirect_to user 
    else 
     flash.now[:danger] = 'Não foi possível realizar o login, ' 
     flash.now[:danger] += 'combinação usuário/senha inválido' 
     render 'new' 
    end 
end 

Теперь я создал контроллер администратора/пользователей, которые я хотел бы выполнить операции с базой данных без ввода пароль и password_confirmation поля. В текущем сценарии я получаю сообщения об ошибках, говорящие, что «пароль и пароль_конфигурация не могут быть пустыми»

Как продолжить? Спасибо.

+1

Привет и добро пожаловать в переполнение стека. Вы отмечаете, что ваш пользовательский метод использует 'has_secure_passwod' и говорит« как указано ниже », но приведенный вами код кода не содержит вашу модель« Пользователь »- только контроллер. Не могли бы вы изменить свой вопрос и добавить код для модели пользователя? что поможет нам определить вашу ошибку. –

+0

Пожалуйста, следуйте ниже ссылки. http://stackoverflow.com/questions/10442466/how-to-skip-has-secure-password-validations## Заголовок ## –

+0

Пожалуйста, отправьте код для вашей модели пользователя тоже – Sajan

ответ

0

Если предположительно ваша проблема в том, что вы хотите, чтобы иметь возможность сохранить новых пользователей в БД без использования пароля, один из способов может быть просто добавить фиктивный пароль для администраторов as explained here

Другой может быть skip validations при сохранении администратора в db. (Я не пробовал это с has_secure_password, поэтому я не уверен, что он сработает, но стоит того)

+0

Спасибо, .save (validate: false), вероятно, решит мою проблему в контроллере администратора, хотя мне придется использовать его очень осторожно. –