123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216 |
- <?php namespace Laravel;
- class Auth {
- /**
- * The current user of the application.
- *
- * @var object
- */
- public static $user;
- /**
- * The key used when storing the user ID in the session.
- *
- * @var string
- */
- const user_key = 'laravel_user_id';
- /**
- * Determine if the user of the application is not logged in.
- *
- * This method is the inverse of the "check" method.
- *
- * @return bool
- */
- public static function guest()
- {
- return ! static::check();
- }
- /**
- * Determine if the user of the application is logged in.
- *
- * @return bool
- */
- public static function check()
- {
- return ! is_null(static::user());
- }
- /**
- * Get the current user of the application.
- *
- * <code>
- * // Get the current user of the application
- * $user = Auth::user();
- *
- * // Access a property on the current user of the application
- * $email = Auth::user()->email;
- * </code>
- *
- * @return object|null
- */
- public static function user()
- {
- if ( ! is_null(static::$user)) return static::$user;
- $id = Session::get(Auth::user_key);
- // To retrieve the user, we'll first attempt to use the "user" Closure
- // defined in the auth configuration file, passing in the ID. The user
- // Closure gives the developer a ton of freedom surrounding how the
- // user is actually retrieved.
- $config = Config::get('auth');
- static::$user = call_user_func($config['user'], $id);
- // If the user wasn't found in the database but a "remember me" cookie
- // exists, we'll attempt to recall the user based on the cookie value.
- // Since all cookies contain a fingerprint hash verifying that they
- // haven't changed, we can trust it.
- $recaller = Cookie::get($config['cookie']);
- if (is_null(static::$user) and ! is_null($recaller))
- {
- static::$user = static::recall($recaller);
- }
- return static::$user;
- }
- /**
- * Attempt to login a user based on a long-lived "remember me" cookie.
- *
- * @param string $recaller
- * @return mixed
- */
- protected static function recall($recaller)
- {
- $recaller = explode('|', Crypter::decrypt($recaller));
- // We'll pass the ID that was stored in the cookie into the same user
- // Closure that is used by the "user" method. If the method returns
- // a user, we will log them into the application.
- $user = call_user_func(Config::get('auth.user'), $recaller[0]);
- if ( ! is_null($user))
- {
- static::login($user);
- return $user;
- }
- }
- /**
- * Attempt to log a user into the application.
- *
- * <code>
- * // Attempt to log a user into the application
- * $success = Auth::attempt('username', 'password');
- *
- * // Attempt to login a user and set the "remember me" cookie
- * Auth::attempt('username', 'password', true);
- * </code>
- *
- * @param string $username
- * @param string $password
- * @param bool $remember
- * @return bool
- */
- public static function attempt($username, $password = null, $remember = false)
- {
- $config = Config::get('auth');
- // When attempting to login the user, we will call the "attempt" closure
- // from the configuration file. This gives the developer the freedom to
- // authenticate based on the needs of their application, even allowing
- // the user of third-party providers.
- $user = call_user_func($config['attempt'], $username, $password);
- if (is_null($user)) return false;
- static::login($user, $remember);
- return true;
- }
- /**
- * Log a user into the application.
- *
- * <code>
- * // Login the user with an ID of 15
- * Auth::login(15);
- *
- * // Login a user by passing a user object
- * Auth::login($user);
- *
- * // Login a user and set a "remember me" cookie
- * Auth::login($user, true);
- * </code>
- *
- * @param object|int $user
- * @param bool $remember
- * @return void
- */
- public static function login($user, $remember = false)
- {
- $id = (is_object($user)) ? $user->id : (int) $user;
- if ($remember) static::remember($id);
- Session::put(Auth::user_key, $id);
- }
- /**
- * Set a cookie so that the user is "remembered".
- *
- * @param string $id
- * @return void
- */
- protected static function remember($id)
- {
- $recaller = Crypter::encrypt($id.'|'.Str::random(40));
- // This method assumes the "remember me" cookie should have the same
- // configuration as the session cookie. Since this cookie, like the
- // session cookie, should be kept very secure, it's probably safe.
- // to assume the cookie settings are the same.
- $config = Config::get('session');
- extract($config, EXTR_SKIP);
- $cookie = Config::get('auth.cookie');
- Cookie::forever($cookie, $recaller, $path, $domain, $secure);
- }
- /**
- * Log the current user out of the application.
- *
- * @return void
- */
- public static function logout()
- {
- // We will call the "logout" closure first, which gives the developer
- // the chance to do any clean-up or before the user is logged out of
- // the application. No action is taken by default.
- call_user_func(Config::get('auth.logout'), static::user());
- static::$user = null;
- $config = Config::get('session');
- extract($config, EXTR_SKIP);
- // When forgetting the cookie, we need to also pass in the path and
- // domain that would have been used when the cookie was originally
- // set by the framework, otherwise it will not be deleted.
- $cookie = Config::get('auth.cookie');
- Cookie::forget($cookie, $path, $domain, $secure);
- Session::forget(Auth::user_key);
- }
- }
|