Форма AuthLogic дает мне неправильные ошибки проверки - почему? - PullRequest
2 голосов
/ 23 мая 2010

Я настроил AuthLogic для Rails в соответствии с примером AuthLogic: http://github.com/binarylogic/authlogic_example.

Я могу успешно войти в систему, но при доступе к users / new.html.erb для регистрации нового пользователя форма возвращает следующие ошибки проверки:

Email is too short (minimum is 6 characters)
Email should look like an email address.
Login is too short (minimum is 3 characters)
Login should use only letters, numbers, spaces, and .-_@ please.
Password is too short (minimum is 4 characters)
Password confirmation is too short (minimum is 4 characters)

Ни одна из этих ошибок не существует в данных, которые я ввожу.

# new.html.erb
<%= form.label :login, nil, :class => "label" %><br />
<%= form.text_field :login, :class => "inputBox",
    :name => "login", :type => "text" %><br />

<%= form.label :password, form.object.new_record? ? nil : "Change password", :class => "label"  %><br />
<%= form.password_field :password, :class => "inputBox", 
    :name => "password", :type => "text" %><br />

<%= form.label "Confirm password", nil, :class => "label" %><br />
<%= form.password_field :password_confirmation, :class => "inputBox",
    :name => "password_confirmation", :type => "text" %><br />

<%= form.label :email, nil, :class => "label" %><br />
<%= form.text_field :email, :class => "inputBox",
    :name => "email", :type => "text" %><br />

# Users controller
def new
  @user = User.new
  render :layout => "forms"
end

Мне кажется, проблема в том, что данные каким-то образом не передаются, и поэтому AuthLogic считает, что входных данных недостаточно. У вас есть идея, почему AuthLogic сообщает мне, что данные не удовлетворяют своей валидации?

------ ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ ------

# User model
class User < ActiveRecord::Base
  acts_as_authentic
  belongs_to :authenticable, :polymorphic => true
end

# Users controller, def create:
def create
    @user = User.new(params[:user])
  if @user.save
    flash[:notice] = "Account registered!"
    redirect_back_or_default account_url
  else
    render :action => :new
  end
end

Ответы [ 3 ]

5 голосов
/ 07 декабря 2010

Проверьте params [: user] и посмотрите, посылает ли он правильные значения

Вы также можете удалить проверку в модели Act_as_authentic, добавив следующие поля:

acts_as_authentic do |c|
 c.validate_login_field = false
 c.validate_email_field = false
 c.validate_password_field = false
end
1 голос
/ 31 августа 2012

Одна вещь, которая не ясна в документации и в видео, это то, что: в строке attr_accessible все еще требуется пароль, даже если у вас может быть crypted_password в модели (то есть, attr_accessible: password).

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

Я не рекомендую устанавливать c.validate_password_field = false, потому что это отключает шифрованиеа также.

1 голос
/ 07 декабря 2010

Просто мысль, у вас отключено массовое задание где-то выше, чем класс вашей модели?

У меня было такое раньше, когда я отключил массовое назначение атрибутов в моих инициализаторах, а затем забыл установить атрибуты моей модели как доступные, используя attr_accessible для всех необходимых атрибутов внутри класса модели.

...