You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

61 lines
1.7 KiB

<?php
namespace authkit2\Observers;
use authkit2\Authkit2;
class UserObserver
{
/*'retrieved', 'creating', 'created', 'updating', 'updated',
'saving', 'saved', 'restoring', 'restored', 'replicating',
'deleting', 'deleted', 'forceDeleted',*/
protected static $token_cache = [];
public function retrieved($user)
{
// Grab the token and refresh off of the user
if ($user instanceof \authkit2\Models\IAuthkitUser)
{
$token = $user->{$user->getAccessTokenName()};
$refresh = $user->{$user->getRefreshTokenName()};
}
else
{
$token = $user->authkit_access_token;
$refresh = $user->authkit_refresh_token;
}
// Create a token object
$user->authkit = Authkit2::get_token($token, $refresh);
// Set a refresh callback on the token -- when it's been refreshed,
// then set the new tokens on the user and save it
$user->authkit->setRefreshCallback(function($token) use ($user) {
if ($user instanceof \authkit2\Models\IAuthkitUser)
{
$user->{$user->getAccessTokenName()} = $token->getAccessToken();
$user->{$user->getRefreshTokenName()} = $token->getRefreshToken();
}
else
{
$user->authkit_access_token = $token->getAccessToken();
$user->authkit_refresh_token = $token->getRefreshToken();
}
$user->save();
});
}
public function saving($user)
{
if (isset($user->authkit))
static::$token_cache[$user->authkit->getAccessToken()] = $user->authkit;
unset($user->authkit);
}
public function saved($user)
{
$access_token = ($user instanceof \authkit2\Models\IAuthkitUser) ? $user->{$user->getAccessTokenName()} : $user->authkit_access_token;
if (isset(static::$token_cache[$access_token]))
$user->authkit = static::$token_cache[$access_token];
}
}