2025-01-07 18:09:44 +08:00
|
|
|
class PasswordResetsController < ApplicationController
|
2025-01-09 17:22:32 +08:00
|
|
|
before_action :get_user, only: [ :edit, :update ]
|
|
|
|
before_action :valid_user, only: [ :edit, :update ]
|
|
|
|
before_action :check_expiration, only: [ :edit, :update ]
|
2025-01-08 11:44:42 +08:00
|
|
|
|
|
|
|
include SessionsHelper
|
2025-01-07 18:09:44 +08:00
|
|
|
def new
|
|
|
|
end
|
|
|
|
|
|
|
|
def create
|
2025-01-08 10:14:36 +08:00
|
|
|
@user = User.find_by(email: params[:password_reset][:email].downcase)
|
2025-01-07 18:09:44 +08:00
|
|
|
if @user
|
|
|
|
@user.create_reset_digest
|
|
|
|
@user.send_password_reset_email
|
|
|
|
flash[:info] = "Email send with password reset instructions"
|
|
|
|
redirect_to root_url
|
|
|
|
else
|
|
|
|
flash.now[:danger] = "Email not found"
|
2025-01-09 17:22:32 +08:00
|
|
|
render "new", status: :unprocessable_entity
|
2025-01-07 18:09:44 +08:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def edit
|
|
|
|
end
|
2025-01-08 11:44:42 +08:00
|
|
|
|
|
|
|
def update
|
|
|
|
if params[:user][:password].empty?
|
|
|
|
@user.errors.add(:password, "can't be empty")
|
2025-01-09 17:22:32 +08:00
|
|
|
render "edit", status: :unprocessable_entity
|
2025-01-08 11:44:42 +08:00
|
|
|
elsif @user.update(user_params)
|
|
|
|
forget(@user)
|
|
|
|
reset_session
|
|
|
|
@user.update_attribute(:reset_digest, nil)
|
|
|
|
log_in @user
|
|
|
|
flash[:success] = "Password has been reset"
|
|
|
|
redirect_to @user
|
|
|
|
else
|
2025-01-09 17:22:32 +08:00
|
|
|
render "edit", status: :unprocessable_entity
|
2025-01-08 11:44:42 +08:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
def user_params
|
|
|
|
params.require(:user).permit(:password, :password_confirmation)
|
|
|
|
end
|
|
|
|
|
|
|
|
def get_user
|
|
|
|
@user = User.find_by(email: params[:email])
|
|
|
|
end
|
|
|
|
|
|
|
|
def valid_user
|
|
|
|
unless @user && @user.activated? &&
|
|
|
|
@user.authenticated?(:reset, params[:id])
|
|
|
|
redirect_to root_url
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def check_expiration
|
|
|
|
if @user.password_reset_expired?
|
|
|
|
flash[:danger] = "Password reset has expired"
|
|
|
|
redirect_to new_password_reset_url
|
|
|
|
end
|
|
|
|
end
|
2025-01-07 18:09:44 +08:00
|
|
|
end
|