Fixed #267 Email verification feature (#268)

* <Implemented basic welcome email upon signup>

* <Added config option to enable>

* <Added verification link routing>

* <Added views for verify/resend and reconfigured routes>

* <Finished Verification System minus Rspec changes>

* <Fixed code style>

* <Modified dome rspec tests>

* <Switched sample env back to default>

* <Added test cases to increase code coverage>

* <Added test_helper>

* <Minor code changes>

* <Added requested changes>

* <Added requested changes>

* <see if this fixes migration>

* <see if this fixes migration>

* <fixed migrations>

* Delete .rake_tasks~

* Update _confirm_button.html.erb

* Update _resend_button.html.erb

* Update verify_email.html.erb

* Update verify_email.text.erb

* <Fixed bugs>

* <Added validation of verification link and fixed some code style>

* <Disabled updating email for omniauth>
This commit is contained in:
John Ma
2018-10-09 14:22:02 -04:00
committed by Jesus Federico
parent daaf305c30
commit 967c805836
26 changed files with 371 additions and 7 deletions

View File

@ -18,6 +18,7 @@
class RoomsController < ApplicationController
before_action :validate_accepted_terms, unless: -> { !Rails.configuration.terms }
before_action :validate_verified_email, unless: -> { !Rails.configuration.enable_email_verification }
before_action :find_room, except: :create
before_action :verify_room_ownership, except: [:create, :show, :join, :logout]
@ -184,4 +185,10 @@ class RoomsController < ApplicationController
redirect_to terms_path unless current_user.accepted_terms
end
end
def validate_verified_email
if current_user
redirect_to resend_path unless current_user.email_verified
end
end
end

View File

@ -28,7 +28,10 @@ class UsersController < ApplicationController
@user = User.new(user_params)
@user.provider = "greenlight"
if @user.save
if Rails.configuration.enable_email_verification && @user.save
UserMailer.verify_email(@user, verification_link(@user)).deliver
login(@user)
elsif @user.save
login(@user)
else
# Handle error on user creation.
@ -81,6 +84,9 @@ class UsersController < ApplicationController
errors.each { |k, v| @user.errors.add(k, v) }
render :edit, params: { settings: params[:settings] }
end
elsif user_params[:email] != @user.email && @user.update_attributes(user_params)
@user.update_attributes(email_verified: false)
redirect_to edit_user_path(@user), notice: I18n.t("info_update_success")
elsif @user.update_attributes(user_params)
redirect_to edit_user_path(@user), notice: I18n.t("info_update_success")
else
@ -97,18 +103,50 @@ class UsersController < ApplicationController
redirect_to root_path
end
# GET /terms
# GET | POST /terms
def terms
redirect_to '/404' unless Rails.configuration.terms
if params[:accept] == "true"
current_user.update_attributes(accepted_terms: true)
redirect_to current_user.main_room if current_user
login(current_user)
end
end
# GET | POST /u/verify/confirm
def confirm
if !current_user || current_user.uid != params[:user_uid]
redirect_to '/404'
elsif current_user.email_verified
login(current_user)
elsif params[:email_verified] == "true"
current_user.update_attributes(email_verified: true)
login(current_user)
else
render 'verify'
end
end
# GET /u/verify/resend
def resend
if !current_user
redirect_to '/404'
elsif current_user.email_verified
login(current_user)
elsif params[:email_verified] == "false"
UserMailer.verify_email(current_user, verification_link(current_user)).deliver
render 'verify'
else
render 'verify'
end
end
private
def verification_link(user)
request.base_url + confirm_path(user.uid)
end
def find_user
@user = User.find_by!(uid: params[:user_uid])
end