| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- # frozen_string_literal: true
- require './lib/json_web_token'
- module UserAuthentication
- extend ActiveSupport::Concern
- included do
- def current_user
- return unless jwt
- @current_user ||=
- begin
- result = JsonWebToken.decode(jwt)
- User.find(result.first['id'])
- rescue StandardError => e
- Rails.logger.error(e.message)
- Rails.logger.debug(e.backtrace.join("\n"))
- nil
- end
- end
- def current_user=(user)
- self.jwt = JsonWebToken.encode(id: user.id, username: user.username)
- end
- def logged_in?
- !current_user.nil?
- end
- def login(user)
- self.current_user = user
- end
- def logout
- cookies.delete(:jwt)
- cookies.delete(:_csrf_token)
- cookies.delete('x-csrf-token')
- end
- end
- private
- def jwt
- cookies[:jwt]
- end
- def jwt=(jwt)
- cookies[:jwt] = {
- value: jwt,
- httponly: true,
- secure: !(Rails.env.development? || Rails.env.test?),
- }
- end
- end
|