class RailsJwtAuth::Session

Constants

Errors

Attributes

errors[R]
jwt[R]
user[R]

Public Class Methods

new(params={}) click to toggle source
# File lib/rails_jwt_auth/session.rb, line 7
def initialize(params={})
  @auth_field_value = (params[RailsJwtAuth.auth_field_name] || '').strip
  @auth_field_value.downcase! if RailsJwtAuth.downcase_auth_field
  @password = params[:password]

  find_user if @auth_field_value.present?
end

Public Instance Methods

generate!(request) click to toggle source
# File lib/rails_jwt_auth/session.rb, line 21
def generate!(request)
  if valid?
    user.clean_reset_password if recoverable?
    user.clean_lock if lockable?
    user.track_session_info(request) if trackable?
    user.load_auth_token

    unless user.save
      add_error(RailsJwtAuth.model_name.underscore, :invalid)

      return false
    end

    generate_jwt(request)

    true
  else
    user.failed_attempt if lockable?

    false
  end
end
valid?() click to toggle source
# File lib/rails_jwt_auth/session.rb, line 15
def valid?
  validate!

  !errors?
end

Private Instance Methods

add_error(field, detail) click to toggle source
# File lib/rails_jwt_auth/session.rb, line 115
def add_error(field, detail)
  @errors.details[field.to_sym] ||= []
  @errors.details[field.to_sym].push({error: detail})
end
confirmable?() click to toggle source
# File lib/rails_jwt_auth/session.rb, line 63
def confirmable?
  @user&.kind_of?(RailsJwtAuth::Confirmable)
end
errors?() click to toggle source
# File lib/rails_jwt_auth/session.rb, line 120
def errors?
  @errors.details.any?
end
field_error(field) click to toggle source
# File lib/rails_jwt_auth/session.rb, line 83
def field_error(field)
  RailsJwtAuth.avoid_email_errors ? :session : field
end
find_user() click to toggle source
# File lib/rails_jwt_auth/session.rb, line 59
def find_user
  @user = RailsJwtAuth.model.where(RailsJwtAuth.auth_field_name => @auth_field_value).first
end
generate_jwt(request) click to toggle source
# File lib/rails_jwt_auth/session.rb, line 124
def generate_jwt(request)
  @jwt = JwtManager.encode(user.to_token_payload(request))
end
lockable?() click to toggle source
# File lib/rails_jwt_auth/session.rb, line 67
def lockable?
  @user&.kind_of?(RailsJwtAuth::Lockable)
end
recoverable?() click to toggle source
# File lib/rails_jwt_auth/session.rb, line 71
def recoverable?
  @user&.kind_of?(RailsJwtAuth::Recoverable)
end
trackable?() click to toggle source
# File lib/rails_jwt_auth/session.rb, line 75
def trackable?
  @user&.kind_of?(RailsJwtAuth::Trackable)
end
user?() click to toggle source
# File lib/rails_jwt_auth/session.rb, line 79
def user?
  @user.present?
end
validate!() click to toggle source
# File lib/rails_jwt_auth/session.rb, line 46
def validate!
  # Can't use ActiveModel::Validations since we have dynamic fields
  @errors = Errors.new({})

  validate_auth_field_presence
  validate_password_presence
  validate_user_exist
  validate_user_is_confirmed if confirmable?
  validate_user_is_not_locked if lockable?
  validate_user_password unless errors?
  validate_custom
end
validate_auth_field_presence() click to toggle source
# File lib/rails_jwt_auth/session.rb, line 87
def validate_auth_field_presence
  add_error(RailsJwtAuth.auth_field_name, :blank) if @auth_field_value.blank?
end
validate_custom() click to toggle source
# File lib/rails_jwt_auth/session.rb, line 111
def validate_custom
  # allow add custom validations overwriting this method
end
validate_password_presence() click to toggle source
# File lib/rails_jwt_auth/session.rb, line 91
def validate_password_presence
  add_error(:password, :blank) if @password.blank?
end
validate_user_exist() click to toggle source
# File lib/rails_jwt_auth/session.rb, line 95
def validate_user_exist
  add_error(field_error(RailsJwtAuth.auth_field_name), :invalid) unless @user
end
validate_user_is_confirmed() click to toggle source
# File lib/rails_jwt_auth/session.rb, line 103
def validate_user_is_confirmed
  add_error(RailsJwtAuth.email_field_name, :unconfirmed) unless @user.confirmed?
end
validate_user_is_not_locked() click to toggle source
# File lib/rails_jwt_auth/session.rb, line 107
def validate_user_is_not_locked
  add_error(RailsJwtAuth.email_field_name, :locked) if @user.access_locked?
end
validate_user_password() click to toggle source
# File lib/rails_jwt_auth/session.rb, line 99
def validate_user_password
  add_error(field_error(:password), :invalid) unless @user.authenticate(@password)
end