Commit c49e1964 authored by Taylor Otwell's avatar Taylor Otwell

Working on base authentication driver.

parent 840954eb
<?php namespace Laravel\Auth\Login\Drivers;
use Laravel\Str;
use Laravel\Cookie;
use Laravel\Session;
abstract class Driver {
/**
* The user currently being managed by the driver.
*
* @var mixed
*/
public $user;
/**
* The current value of the user's token.
*
* @var string|null
*/
public $token;
/**
* Create a new login auth driver instance.
*
* @return void
*/
public function __construct()
{
if (Session::started())
{
$this->token = Session::get($this->token());
}
// If a token did not exist in the session for the user, we will attempt
// to load the value of a "remember me" cookie for the driver, which
// serves as a long-lived client side authenticator for the user.
if (is_null($this->token))
{
$this->token = $this->recall();
}
}
/**
* Determine if the user is logged in.
*
* @return bool
*/
public function check()
{
return ! is_null($this->user());
}
/**
* Get the current user of the application.
*
* If the user is a guest, null should be returned.
*
* @return mixed|null
*/
abstract public function user();
/**
* Attempt to log a user into the application.
*
* @param dynamic $arguments
* @return void
*/
abstract public function attempt();
/**
* Login the user assigned to the given token.
*
* The token is typically a numeric ID for the user.
*
* @param string $token
*/
public function login($token)
{
$this->store($token);
}
/**
* Log the user out of the driver's auth context.
*
* @return void
*/
public function logout()
{
$this->user = null;
$this->cookie($this->recaller(), null, -2000);
Session::forget($this->token());
}
/**
* Store a user's token in the session.
*
* @param string $token
* @return void
*/
protected function store($token)
{
Session::put($this->token(), $token);
}
/**
* Store a user's token in a long-lived cookie.
*
* @param string $token
* @return void
*/
protected function remember($token)
{
$token = Crypter::encrypt($token.'|'.Str::random(40));
$this->cookie($this->recaller(), $token, Cookie::forever);
}
/**
* Attempt to find a "remember me" cookie for the user.
*
* @return string|null
*/
protected function recall()
{
$cookie = Cookie::get($this->recaller());
// By default, "remember me" cookies are encrypted and contain the user
// token as well as a random string. If it exists, we'll decrypt it
// and return the first segment, which is the user's ID token.
if ( ! is_null($cookie))
{
return head(explode('|', Crypter::decrypt($cookie)));
}
}
/**
* Store an authentication cookie.
*
* @param string $name
* @param string $value
* @param int $minutes
* @return void
*/
protected function cookie($name, $value, $minutes)
{
// When setting the default implementation of an authentication
// cookie we'll use the same settings as the session cookie.
// This typically makes sense as they both are sensitive.
$config = Config::get('session');
extract($config);
Cookie::put($name, $minutes, $token, $path, $domain, $secure);
}
/**
* Get session key name used to store the token.
*
* @return string
*/
protected function token()
{
return $this->name().'_login';
}
/**
* Get the name used for the "remember me" cookie.
*
* @return string
*/
protected function recaller()
{
return $this->name().'_remember';
}
/**
* Get the name of the driver in a storage friendly format.
*
* @return string
*/
protected function name()
{
return strtolower(str_replace('\\', '_', get_class($this)));
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment