Managing loaner chromebooks for students and teachers in the HUUSD school district.
1class AuthenticationsController < ApplicationController
2 include Authenticatable
3 before_action :ensure_authenticated, only: [:destroy]
4 before_action :ensure_not_authenticated, only: [:new, :create]
5
6 def new
7 StatsD.increment("login_page_viewed")
8
9 # Measure the time taken to process the rendering of the new page
10 StatsD.measure('view.render_login_page') do
11 if session[:user_id]
12 StatsD.increment("already_logged_in")
13 redirect_to overview_path
14 else
15 render "new"
16 end
17 end
18 end
19
20 def create
21 StatsD.increment("login_attempt")
22
23 # Measure the time taken for the authentication process
24 StatsD.measure('auth.authenticate_user') do
25 @user = User.find_by(email: auth_params[:email])
26 if @user&.authenticate(auth_params[:password])
27 StatsD.increment("login_successful")
28 session[:user_id] = @user.id
29 StatsD.set('users.unique_logged_in', @user.id) # Track unique users logging in
30 redirect_to overview_path
31 else
32 StatsD.increment("login_failed")
33 flash[:danger] = "Login failed. Please try again."
34 render "new"
35 end
36 end
37 end
38
39 def destroy
40 # Measure the time taken to process the logout action
41 StatsD.measure('auth.process_logout') do
42 StatsD.increment("logout")
43 session[:user_id] = nil
44 StatsD.event('User Logged Out', "User with ID #{session[:user_id]} logged out") # Log an event for logout
45 redirect_to login_path
46 end
47 end
48
49 private
50
51 def auth_params
52 params.require(:user).permit(:email, :password)
53 end
54end