Finished phase005
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
class SessionsController < ApplicationController
|
||||
skip_before_action :require_identified_user, only: %i[new create destroy]
|
||||
|
||||
def new
|
||||
end
|
||||
|
||||
def create
|
||||
access_key = AccessKey.current
|
||||
|
||||
unless access_key.matches?(session_params[:key])
|
||||
Rails.logger.warn("Invalid access key identification attempt for email=#{session_params[:email]}")
|
||||
flash.now[:alert] = "The access key is not valid."
|
||||
return render :new, status: :unprocessable_entity
|
||||
end
|
||||
|
||||
user = find_or_build_user
|
||||
return render :new, status: :unprocessable_entity unless user
|
||||
|
||||
sign_in(user)
|
||||
redirect_to vehicles_path, notice: "You have been identified."
|
||||
end
|
||||
|
||||
def destroy
|
||||
sign_out
|
||||
redirect_to identify_path, notice: "You have been logged out."
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def session_params
|
||||
params.permit(:name, :email, :key)
|
||||
end
|
||||
|
||||
def find_or_build_user
|
||||
email = session_params[:email].to_s.strip.downcase
|
||||
name = session_params[:name].to_s.strip
|
||||
user = User.find_by(email: email)
|
||||
|
||||
if user
|
||||
return user if user.name == name
|
||||
|
||||
flash.now[:alert] = "The name does not match the existing user for that email."
|
||||
return nil
|
||||
end
|
||||
|
||||
user = User.new(name: name, email: email)
|
||||
return user if user.save
|
||||
|
||||
flash.now[:alert] = user.errors.full_messages.to_sentence
|
||||
nil
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user