Class: Authenticate::Session

Inherits:
Object
  • Object
show all
Includes:
Debug
Defined in:
lib/authenticate/session.rb

Overview

Represents an Authenticate session.

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Debug

#debug

Constructor Details

#initialize(request) ⇒ Session

Initialize an Authenticate session.

The presence of a session does NOT mean the user is logged in; call #logged_in? to determine login status.



14
15
16
17
18
19
# File 'lib/authenticate/session.rb', line 14

def initialize(request)
  @request = request # trackable module accesses request
  @cookies = request.cookie_jar
  @session_token = @cookies[cookie_name]
  debug 'SESSION initialize: @session_token: ' + @session_token.inspect
end

Instance Attribute Details

#requestObject

Returns the value of attribute request.



9
10
11
# File 'lib/authenticate/session.rb', line 9

def request
  @request
end

Instance Method Details

#current_userUser

Get the user represented by this session.

Returns:



60
61
62
63
64
# File 'lib/authenticate/session.rb', line 60

def current_user
  debug "session.current_user #{@current_user.inspect}"
  @current_user ||= load_user_from_session_token if @session_token.present?
  @current_user
end

#logged_in?Boolean

Has this user successfully logged in?

Returns:

  • (Boolean)


69
70
71
72
# File 'lib/authenticate/session.rb', line 69

def logged_in?
  debug "session.logged_in? #{current_user.present?}"
  current_user.present?
end

#login(user) {|status| ... } ⇒ User

Finish user login process, after the user has been authenticated.

Called when user creates an account or signs back into the app. Runs all configured callbacks, checking for login failure.

If login is successful, @current_user is set and a session token is generated and returned to the client browser. If login fails, the user is NOT logged in. No session token is set, and @current_user will not be set.

After callbacks are finished, a LoginStatus is yielded to the provided block, if one is provided.

Parameters:

  • user (User)

    login completed for this user

Yield Parameters:

Returns:



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/authenticate/session.rb', line 37

def (user)
  @current_user = user
  @current_user.generate_session_token if user.present?

  message = catch(:failure) do
    Authenticate.lifecycle.run_callbacks(:after_set_user, @current_user, self, event: :authentication)
    Authenticate.lifecycle.run_callbacks(:after_authentication, @current_user, self, event: :authentication)
  end

  status = message.present? ? Failure.new(message) : Success.new
  if status.success?
    @current_user.save
    write_cookie if @current_user.session_token
  else
    @current_user = nil
  end

  yield(status) if block_given?
end

#logoutvoid

This method returns an undefined value.

Invalidate the session token, unset the current user and remove the cookie.



77
78
79
80
81
82
83
84
85
86
# File 'lib/authenticate/session.rb', line 77

def logout
  # nuke session_token in db
  current_user.reset_session_token! if current_user.present?

  # nuke notion of current_user
  @current_user = nil

  # # nuke cookie
  @cookies.delete cookie_name
end