Skip to content

Commit

Permalink
Add AuthenticateSession middleware.
Browse files Browse the repository at this point in the history
  • Loading branch information
taylorotwell committed Nov 15, 2016
1 parent ef11bd7 commit fc302a6
Show file tree
Hide file tree
Showing 2 changed files with 89 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/Illuminate/Foundation/Http/Kernel.php
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ class Kernel implements KernelContract
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\Illuminate\Auth\Middleware\Authenticate::class,
\Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
\Illuminate\Auth\Middleware\Authorize::class,
];
Expand Down
88 changes: 88 additions & 0 deletions src/Illuminate/Session/Middleware/AuthenticateSession.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
<?php

namespace Illuminate\Session\Middleware;

use Closure;
use Illuminate\Auth\AuthenticationException;
use Illuminate\Contracts\Auth\Factory as AuthFactory;

class AuthenticateSession
{
/**
* The authentication factory implementation.
*
* @var \Illuminate\Contracts\Auth\Factory
*/
protected $auth;

/**
* Create a new middleware instance.
*
* @param \Illuminate\Contracts\Auth\Factory $auth
* @return void
*/
public function __construct(AuthFactory $auth)
{
$this->auth = $auth;
}

/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (! $request->user() || ! $request->session()) {
return $next($request);
}

if (! $request->session()->has('password_hash') && $this->auth->viaRemember()) {
$this->logout($request);
}

if (! $request->session()->has('password_hash')) {
$this->storePasswordHashInSession($request);
}

if ($request->session()->get('password_hash') !== $request->user()->password) {
$this->logout($request);
}

return tap($next($request), function () use ($request) {
$this->storePasswordHashInSession($request);
});
}

/**
* Store the user's current password hash in the session.
*
* @param \Illuminate\Http\Request $request
* @return void
*/
protected function storePasswordHashInSession($request)
{
$request->session()->put([
'password_hash' => $request->user()->password,
]);
}

/**
* Log the user out of the application.
*
* @param \Illuminate\Http\Request $request
* @return void
*
* @throws \Illuminate\Auth\AuthenticationException
*/
protected function logout($request)
{
$this->auth->logout();

$request->session()->flush();

throw new AuthenticationException;
}
}

0 comments on commit fc302a6

Please sign in to comment.