Я пытался добавить пароль для пользователей, которые забыли пароль. Пользователи нажми на забытый пароль? на странице регистрации. Затем пользователь вводит свой адрес электронной почты и щелкает сброс пароля, который создает токен и отправляет электронное письмо со ссылкой для сброса пароля. По большей части он работает ТОЛЬКО, когда ящик электронной почты пуст или имеет ровно 6 случайных букв/цифр, но он не работает, когда пользователь помещает свой адрес электронной почты и щелкает сброс пароля, он вызывает сообщение об ошибке:1) PasswordResets адрес электронной почты пользователя при запросе пароля сброс
**Validation failed: Password can't be blank
Password cant be blank, password is too short(6 min)**
изменяя user.rb проверяющий: пароль, наличие: истинно, длина: {минимум: 6} подтверждает: password_confirmation, наличие: истинный
Я получил различные ошибки, есть в любом случае для исключения этой проверки из этой формы сбрасывания пароля
app/models/user.rb:30:in `send_password_reset'
app/controllers/password_resets_controller.rb:7:in `create'
Ошибка в этой ошибке в видео 275 Как я тестирую. на 11:20
Failure/Error: click_button "Сброс пароля" ActiveRecord :: RecordInvalid: Не удалось выполнить проверку пароля не может быть пустым, пароль слишком короткий (минимум 6 символов), подтверждение пароля не может быть пустым
# ./app/models/user.rb:30:in `send_password_reset'
# ./app/controllers/password_resets_controller.rb:7:in `create'
# (eval):2:in `click_button'
# ./spec/requests/password_resets_spec.rb:9:in `block (2 levels) in <top (required)>'
Законченный в 13.66 секунд 95 примеров, 1 недостаточность
Это часть кода используется.
user.rb
# == Schema Information
#
# Table name: users
#
# id :integer not null, primary key
# name :string(255)
# email :string(255)
# created_at :datetime not null
# updated_at :datetime not null
#
class User < ActiveRecord::Base
attr_accessible :name, :email, :password, :password_confirmation
has_secure_password
before_save { |user| user.email = email.downcase }
before_save :create_remember_token
validates :name, presence: true, length: { maximum: 50 }
VALID_EMAIL_REGEX = /\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z/i
validates :email, presence: true,
format: { with: VALID_EMAIL_REGEX },
uniqueness: { case_sensitive: false }
validates :password, presence: true, length: { minimum: 6 }
validates :password_confirmation, presence: true
def send_password_reset
generate_token(:password_reset_token)
self.password_reset_sent_at = Time.zone.now
save!
UserMailer.password_reset(self).deliver
end
def generate_token(column)
begin
self[column] = SecureRandom.urlsafe_base64
end while User.exists?(column => self[column])
end
def self.search(search)
if search
find(:all, :conditions => ['name LIKE ?', "%#{search}%"])
else
find(:all)
end
end
private
def create_remember_token
self.remember_token = SecureRandom.urlsafe_base64
end
end
password_resets_controller.rb
class PasswordResetsController < ApplicationController
def new
end
def create
user = User.find_by_email(params[:email])
user.send_password_reset
redirect_to root_url, :notice => "Email sent with password reset instructions."
end
def edit
@user = User.find_by_password_reset_token!(params[:id])
end
end
password_resets_spec
require 'spec_helper'
describe "PasswordResets" do
it "emails user when requesting password reset" do
user = Factory(:user)
visit signin_path
click_link "password"
fill_in "Email", :with => user.email
click_button "Reset Password"
current_path.should eq(root_path)
page.should have_content("Email sent")
last_email.to.should include(user.email)
end
end
user_spec.rb
# == Schema Information
#
# Table name: users
#
# id :integer not null, primary key
# name :string(255)
# email :string(255)
# created_at :datetime not null
# updated_at :datetime not null
#
require 'spec_helper'
describe User do
describe "#send_password_reset" do
let(:user) { Factory(:user) }
it "generates a unique password_reset_token each time" do
user.send_password_reset
last_token = user.password_reset_token
user.send_password_reset
user.password_reset_token.should_not eq(last_token)
end
it "saves the time the password reset was sent" do
user.send_password_reset
user.reload.password_reset_sent_at.should be_present
end
it "delivers email to user" do
user.send_password_reset
last_email.to.should include(user.email)
end
end
before do
@user = User.new(name: "Example User", email: "[email protected]",
password: "foobar", password_confirmation: "foobar")
end
subject { @user }
it { should respond_to(:name) }
it { should respond_to(:email) }
it { should respond_to(:password_digest) }
it { should respond_to(:password) }
it { should respond_to(:password_confirmation) }
it { should respond_to(:remember_token) }
it { should respond_to(:authenticate) }
it { should respond_to(:admin) }
it { should respond_to(:authenticate) }
it { should be_valid }
it { should_not be_admin }
describe "with admin attribute set to 'true'" do
before { @user.toggle!(:admin) }
it { should be_admin }
end
describe "when name is not present" do
before { @user.name = " " }
it { should_not be_valid }
end
describe "when email is not present" do
before { @user.email = " " }
it { should_not be_valid }
end
describe "when name is too long" do
before { @user.name = "a" * 51 }
it { should_not be_valid }
end
describe "when email format is invalid" do
it "should be invalid" do
addresses = %w[[email protected],com user_at_foo.org [email protected]
[email protected]_baz.com [email protected]+baz.com]
addresses.each do |invalid_address|
@user.email = invalid_address
@user.should_not be_valid
end
end
end
describe "when email format is valid" do
it "should be valid" do
addresses = %w[[email protected] [email protected] [email protected] [email protected]]
addresses.each do |valid_address|
@user.email = valid_address
@user.should be_valid
end
end
end
describe "when email address is already taken" do
before do
user_with_same_email = @user.dup
user_with_same_email.email = @user.email.upcase
user_with_same_email.save
end
it { should_not be_valid }
end
describe "email address with mixed case" do
let(:mixed_case_email) { "[email protected]" }
it "should be saved as all lower-case" do
@user.email = mixed_case_email
@user.save
@user.reload.email.should == mixed_case_email.downcase
end
end
describe "when password is not present" do
before { @user.password = @user.password_confirmation = " " }
it { should_not be_valid }
end
describe "when password doesn't match confirmation" do
before { @user.password_confirmation = "mismatch" }
it { should_not be_valid }
end
describe "when password confirmation is nil" do
before { @user.password_confirmation = nil }
it { should_not be_valid }
end
it { should respond_to(:authenticate) }
describe "with a password that's too short" do
before { @user.password = @user.password_confirmation = "a" * 5 }
it { should be_invalid }
end
describe "return value of authenticate method" do
before { @user.save }
let(:found_user) { User.find_by_email(@user.email) }
describe "with valid password" do
it { should == found_user.authenticate(@user.password) }
end
describe "with invalid password" do
let(:user_for_invalid_password) { found_user.authenticate("invalid") }
it { should_not == user_for_invalid_password }
specify { user_for_invalid_password.should be_false }
end
end
describe "remember token" do
before { @user.save }
its(:remember_token) { should_not be_blank }
end
end
Причина, по которой вы получаете downvoted, потому что ваш вопрос очень плохо описан. Честно говоря, я не уверен, что вы просите (я могу догадаться, но это не главное) и почему вы дали код, который вы сделали. Попробуйте снова (лучше, пожалуйста) или отредактируйте вопрос. –
@theoscholiadis idk, почему я получаю сообщение об ошибке, которое я получаю, я думаю, мой вопрос заключается в том, как я его исправить. –
@ TheoScholiadis Я заметил, что когда я удаляю из user.rb length: {minimum: 6}, он больше не имеет этой части ошибки, есть ли способ оправдать эти проверки при отправке Сбросить пароль? –