diff --git a/app/controllers/password_resets_controller.rb b/app/controllers/password_resets_controller.rb
new file mode 100644
index 0000000..7dc3455
--- /dev/null
+++ b/app/controllers/password_resets_controller.rb
@@ -0,0 +1,20 @@
+class PasswordResetsController < ApplicationController
+ def new
+ end
+
+ def create
+ @user = User.find_by(emial: params[:password_reset][:email].downcase)
+ 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"
+ render 'new'
+ end
+ end
+
+ def edit
+ end
+end
diff --git a/app/helpers/password_resets_helper.rb b/app/helpers/password_resets_helper.rb
new file mode 100644
index 0000000..0c9d96e
--- /dev/null
+++ b/app/helpers/password_resets_helper.rb
@@ -0,0 +1,2 @@
+module PasswordResetsHelper
+end
diff --git a/app/views/password_resets/edit.html.erb b/app/views/password_resets/edit.html.erb
new file mode 100644
index 0000000..2d1800e
--- /dev/null
+++ b/app/views/password_resets/edit.html.erb
@@ -0,0 +1,2 @@
+
PasswordResets#edit
+Find me in app/views/password_resets/edit.html.erb
diff --git a/app/views/password_resets/new.html.erb b/app/views/password_resets/new.html.erb
new file mode 100644
index 0000000..f9debf8
--- /dev/null
+++ b/app/views/password_resets/new.html.erb
@@ -0,0 +1,14 @@
+<% provide(:title, "Forget password") %>
+Forget password
+
+
+
+ <%= form_with(url: password_resets_path, scope: password_reset,
+ local: true) do |f| %>
+ <%= f.label :email %>
+ <%= f.email_field :email, class: "form-control" %>
+
+ <%= f.submit "Submit", class: "btn btn-primary" %>
+ <% end %>
+
+
diff --git a/app/views/sessions/new.html.erb b/app/views/sessions/new.html.erb
index bd4fe03..fbe815b 100644
--- a/app/views/sessions/new.html.erb
+++ b/app/views/sessions/new.html.erb
@@ -8,6 +8,7 @@
<%= f.email_field :email, class: 'form-control' %>
<%= f.label :password %>
+ <%= link_to "(forgot password)", new_password_reset_path %>
<%= f.password_field :password, class: 'form-control' %>
<%= f.label :remember_me, class: "checkbox inline" do %>
diff --git a/config/routes.rb b/config/routes.rb
index 637018d..a3af422 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -1,4 +1,6 @@
Rails.application.routes.draw do
+ get "password_resets/new"
+ get "password_resets/edit"
# get "sessions/new"
# get "users/new"
# get "static_pages/home"
@@ -19,6 +21,7 @@ Rails.application.routes.draw do
resources :users
resources :account_activations, only: [ :edit ]
+ resources :password_resets, only: [ :new, :create, :edit, :update ]
# Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html
diff --git a/db/migrate/20250107093124_add_reset_to_users.rb b/db/migrate/20250107093124_add_reset_to_users.rb
new file mode 100644
index 0000000..2eb292e
--- /dev/null
+++ b/db/migrate/20250107093124_add_reset_to_users.rb
@@ -0,0 +1,6 @@
+class AddResetToUsers < ActiveRecord::Migration[8.0]
+ def change
+ add_column :users, :reset_digest, :string
+ add_column :users, :reset_send_at, :datetime
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 991e966..88fd542 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema[8.0].define(version: 2025_01_06_091017) do
+ActiveRecord::Schema[8.0].define(version: 2025_01_07_093124) do
create_table "users", force: :cascade do |t|
t.string "name"
t.string "email"
@@ -22,6 +22,8 @@ ActiveRecord::Schema[8.0].define(version: 2025_01_06_091017) do
t.string "activation_digest"
t.boolean "activated", default: false
t.datetime "activated_at"
+ t.string "reset_digest"
+ t.datetime "reset_send_at"
t.index ["email"], name: "index_users_on_email", unique: true
end
end