Class: Aker::Rack::Logout
- Inherits:
-
Object
- Object
- Aker::Rack::Logout
- Includes:
- ConfigurationHelper
- Defined in:
- lib/aker/rack/logout.rb
Overview
Middleware for ending authenticated sessions. This middleware listens for ‘GET` requests to the logout path and when such requests are received, clears user data.
The logout path is ‘/logout` by default. It may be overridden in the Aker configuration by setting a value for `:logout_path` in the `:rack` parameter group.
## Implications of GET
‘GET` was chosen to ensure that there always exists a way to clear application session data independent of whether it is possible to get to a logout link. (If unmarshalable data exists in the session – say, stored objects whose format has changed between application revisions – it is possible to get into a state where logout links cannot be accessed.)
Using ‘GET` does mean that it is possible to execute CSRF attacks that will log out the user. The severity of this can range from a minor annoyance (just having to log in again while browsing a series of pages) to major (losing all data in a large POST).
Instance Method Summary collapse
-
#call(env) ⇒ Array
When given a ‘GET` for the configured logout path, invokes Warden’s logout procedure (which resets the session), and passes control down to the rest of the application.
-
#initialize(app) ⇒ Logout
constructor
Instantiates the middleware.
Methods included from ConfigurationHelper
Methods included from EnvironmentHelper
#authority, #configuration, #interactive?
Constructor Details
#initialize(app) ⇒ Logout
Instantiates the middleware.
38 39 40 |
# File 'lib/aker/rack/logout.rb', line 38 def initialize(app) @app = app end |
Instance Method Details
#call(env) ⇒ Array
When given a ‘GET` for the configured logout path, invokes Warden’s logout procedure (which resets the session), and passes control down to the rest of the application.
If the application or a mode does not provide a handler for the configured logout path, then the handler defined by DefaultLogoutResponder will be invoked.
54 55 56 57 58 59 60 |
# File 'lib/aker/rack/logout.rb', line 54 def call(env) if env['REQUEST_METHOD'] == 'GET' && env['PATH_INFO'] == logout_path(env) env['warden'].logout end @app.call(env) end |