signup: don't send welcome emails to invalid addresses.

Fix attempting to send welcome emails when user didn't provide a valid
email address.
This commit is contained in:
evazion
2020-03-24 00:23:54 -05:00
parent e79910431f
commit 4a5bec71f6
4 changed files with 7 additions and 7 deletions

View File

@@ -4,7 +4,7 @@ class PasswordResetsController < ApplicationController
def create
@user = User.find_by_name(params.dig(:user, :name))
if @user.can_receive_email?
if @user.can_receive_email?(require_verification: false)
UserMailer.password_reset(@user).deliver_later
flash[:notice] = "Password reset email sent. Check your email"
respond_with(@user, location: new_session_path)

View File

@@ -79,7 +79,7 @@ class UsersController < ApplicationController
flash[:notice] = "Sign up failed: #{@user.errors.full_messages.join("; ")}"
else
session[:user_id] = @user.id
UserMailer.welcome_user(@user).deliver_later
UserMailer.welcome_user(@user).deliver_later if @user.can_receive_email?(require_verification: false)
set_current_user
end

View File

@@ -355,8 +355,8 @@ class User < ApplicationRecord
"#{name} <#{email_address.address}>"
end
def can_receive_email?
email_address.present? && email_address.is_verified? && email_address.is_deliverable?
def can_receive_email?(require_verification: true)
email_address.present? && email_address.is_deliverable? && (email_address.is_verified? || !require_verification)
end
end

View File

@@ -119,7 +119,7 @@ class UsersControllerTest < ActionDispatch::IntegrationTest
assert_redirected_to User.last
assert_equal("xxx", User.last.name)
assert_equal(nil, User.last.email_address)
assert_no_emails
assert_no_enqueued_emails
end
should "create a user with a valid email" do
@@ -136,7 +136,7 @@ class UsersControllerTest < ActionDispatch::IntegrationTest
post users_path, params: { user: { name: "xxx", password: "xxxxx1", password_confirmation: "xxxxx1", email: "test" }}
assert_response :success
assert_no_emails
assert_no_enqueued_emails
end
end
@@ -145,7 +145,7 @@ class UsersControllerTest < ActionDispatch::IntegrationTest
post users_path, params: { user: { name: "xxx", password: "xxxxx1", password_confirmation: "xxxxx1", email: "nobody@nothing.donmai.us" } }
assert_response :success
assert_no_emails
assert_no_enqueued_emails
end
end