Skip to content

Commit

Permalink
Merge pull request #16 from iMi-digital/15-livewire
Browse files Browse the repository at this point in the history
#15 bind RouteCollectionInterface to fix livewire
  • Loading branch information
amenk committed Sep 8, 2023
2 parents 0220f52 + f72e96c commit 716335c
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 2 deletions.
12 changes: 12 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,18 @@ If you would like to generate URLs without a session ID, add a `NO_ADD_SID` para

{{ URL::to('/', ['NO_ADD_SID' => true]) }}

Livewire Support
----------------
To include session ids when using Livewire, add this script to your page:

<script type="text/javascript">
document.addEventListener('livewire:load', function(event) {
Livewire.addHeaders({
'X-session': '{{ Session::getId() }}',
})
});
</script>

Warning
-------

Expand Down
14 changes: 12 additions & 2 deletions src/StartSessionMiddleware.php
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,8 @@ public function getSession(\Illuminate\Http\Request $request)
{
$session = parent::getSession($request);

if ($request->has($session->getName())) {
$session->setId($request->input($session->getName()));
if ($id=$this->resolveSessionParameter($request, $session)) {
$session->setId($id);

if (!$session->has(self::LOCKED_FIELD)) {
$this->lockToUser($session, $request);
Expand All @@ -76,4 +76,14 @@ protected function addCookieToResponse(Response $response, Session $session)

parent::addCookieToResponse($response, $session);
}

protected function resolveSessionParameter($request, $session)
{
if ($request->has($session->getName())) {
return $request->input($session->getName());
}
if ($request->hasHeader('x-session')) {
return $request->header('x-session');
}
}
}
5 changes: 5 additions & 0 deletions src/UrlServiceProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
namespace iMi\LaravelTransSid;

use Illuminate\Foundation\Application;
use Illuminate\Routing\RouteCollection;
use Illuminate\Routing\RouteCollectionInterface;
use Illuminate\Routing\UrlGenerator;
use Illuminate\Support\ServiceProvider;

Expand All @@ -17,6 +19,9 @@ public function registerUrlGenerator()
{
$this->app->bind(UrlGenerator::class, UrlGeneratorService::class);

// explicitly bind RouteCollectionInterface to avoid problems with LiveWire
$this->app->bind(RouteCollectionInterface::class, RouteCollection::class);

$this->app->singleton('url', function (Application $app) {
$routes = $app['router']->getRoutes();

Expand Down

0 comments on commit 716335c

Please sign in to comment.