Skip to content

Conversation

@thekid
Copy link
Member

@thekid thekid commented Feb 15, 2025

Implements #7 by using a request value named context.

Update user

Before:

return [
  '/theme' => $auth->required(function($req, $res) use($sessions) {
    if ($session= $sessions->locate($req)) {
      [$claims, $user]= $session->value('auth');
      $user['theme']= $req->params('theme');
      $session->register('auth', [$claims, $user]);
      $session->transmit($res);
    }

    $res->answer(202);
  }),
  // ...
];

After:

return [
  '/theme' => $auth->required(function($req, $res) {
    $req->value('context')->modify(['theme' => $req->param('theme')]);
    $res->answer(202);
  }),
  // ...
];

Logout

Before:

return [
  '/logout' => $auth->required(function($req, $res) use($sessions) {
    if ($session= $sessions->locate($req)) {
      $session->destroy();
      $session->transmit($res);
    }

    $res->answer(302);
    $res->header('Location', '/?logged-out');
  }),
  // ...
];

After:

return [
  '/logout' => $auth->required(function($req, $res) {
    $req->value('context')->logout();
    $res->answer(302);
    $res->header('Location', '/?logged-out');
  }),
  // ...
];

@thekid
Copy link
Member Author

thekid commented Feb 18, 2025

Should we be able to register (cache) arbitrary values in the session?

$context= $req->value('context');

// Explicit read/write
$cities= $context->value('cities');
$context->register('cities', $cities);

// Access cache, fetch from repository if necessary
$cities= $context->cache('cities', $repository->cities(...));

// After <TTL> seconds, refresh from repository
$cities= $context->cache('cities', $repository->cities(...), ttl: 3600);

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants