59 lines
1.4 KiB
Ruby
59 lines
1.4 KiB
Ruby
module BasicAuthentication
|
|
extend ActiveSupport::Concern
|
|
|
|
included do
|
|
before_action :current_user
|
|
helper_method :current_user
|
|
helper_method :user_signed_in?
|
|
end
|
|
|
|
def authenticate_user!
|
|
store_location
|
|
redirect_to login_path, alert: "You need to login to access that page." unless user_signed_in?
|
|
end
|
|
|
|
def login(user)
|
|
reset_session
|
|
user.regenerate_session_token
|
|
session[:current_user_session_token] = user.reload.session_token
|
|
end
|
|
|
|
def forget(user)
|
|
cookies.delete :remember_token
|
|
user.regenerate_remember_token
|
|
end
|
|
|
|
def logout
|
|
user = current_user
|
|
reset_session
|
|
user.regenerate_session_token
|
|
end
|
|
|
|
def redirect_if_authenticated
|
|
redirect_to checks_path, alert: "You are already logged in." if user_signed_in?
|
|
end
|
|
|
|
def remember(user)
|
|
user.regenerate_remember_token
|
|
cookies.permanent.encrypted[:remember_token] = user.remember_token
|
|
end
|
|
|
|
def store_location
|
|
session[:user_return_to] = request.original_url if request.get? && request.local?
|
|
end
|
|
|
|
private
|
|
|
|
def current_user
|
|
Current.user ||= if session[:current_user_session_token].present?
|
|
User.find_by(session_token: session[:current_user_session_token])
|
|
elsif cookies.permanent.encrypted[:remember_token].present?
|
|
User.find_by(remember_token: cookies.permanent.encrypted[:remember_token])
|
|
end
|
|
end
|
|
|
|
def user_signed_in?
|
|
Current.user.present?
|
|
end
|
|
end
|