diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 038fdea..ae16a8c 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -1,6 +1,7 @@ class ApplicationController < ActionController::Base before_action :set_locale - + protect_from_forgery with: :exception + include SessionsHelper include Pagy::Backend private diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb new file mode 100644 index 0000000..5ae8c34 --- /dev/null +++ b/app/controllers/sessions_controller.rb @@ -0,0 +1,20 @@ +class SessionsController < ApplicationController + def new; end + + def create + user = User.find_by email: params[:session][:email].downcase + if user&.authenticate params[:session][:password] + log_in user + redirect_to root_url + else + @email = params[:session][:email] + flash.now[:danger] = t ".invalid_email_password" + render :new + end + end + + def destroy + log_out + redirect_to root_url + end +end diff --git a/app/helpers/sessions_helper.rb b/app/helpers/sessions_helper.rb new file mode 100644 index 0000000..40c90f1 --- /dev/null +++ b/app/helpers/sessions_helper.rb @@ -0,0 +1,20 @@ +module SessionsHelper + def log_in user + session[:user_id] = user.id + session[:user_name] = user.name + end + + def current_user + @current_user ||= User.find_by id: session[:user_id] + end + + def logged_in? + current_user.present? + end + + def log_out + session.delete :user_id + session.delete :user_name + @current_user = nil + end +end diff --git a/app/models/user.rb b/app/models/user.rb index b6879b8..4a58797 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -2,4 +2,17 @@ class User < ApplicationRecord has_many :addresses, dependent: :destroy has_many :orders, dependent: :destroy has_many :comments, dependent: :destroy + + has_secure_password + + class << self + def digest string + cost = if ActiveModel::SecurePassword.min_cost + BCrypt::Engine::MIN_COST + else + BCrypt::Engine.cost + end + BCrypt::Password.create string, cost: cost + end + end end diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index d107ed1..e585ce4 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -6,18 +6,17 @@ <%= csrf_meta_tags %> <%= csp_meta_tag %> - - - - - <%= stylesheet_link_tag "application", media: "all", "data-turbolinks-track": "reload" %> <%= javascript_pack_tag "application", "data-turbolinks-track": "reload" %>
<%= render "shared/header" %> - <%= yield %> +