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.
 
 
 
 
 

71 lines
1.8 KiB

<?php
namespace common\auth;
use filsh\yii2\oauth2server\Module;
use OAuth2\Storage\UserCredentialsInterface;
use core\entities\user\User;
use core\repositories\user\read\UserReadRepository;
use Yii;
use yii\web\IdentityInterface;
class Identity implements IdentityInterface, UserCredentialsInterface
{
public $user;
public function __construct(User $user)
{
$this->user = $user;
}
public static function findIdentity($id)
{
$user = self::getRepository()->findActiveById($id);
return $user ? new self($user): null;
}
public static function findIdentityByAccessToken($token, $type = null)
{
$data = self::getOauth()->getServer()->getResourceController()->getToken();
return !empty($data['user_id']) ? static::findIdentity($data['user_id']) : null;
}
public function getId(): int
{
return $this->user->id;
}
public function getAuthKey(): string
{
return $this->user->auth_key;
}
public function validateAuthKey($authKey): bool
{
return $this->getAuthKey() === $authKey;
}
public function checkUserCredentials($username, $password): bool
{
if (!$user = self::getRepository()->findActiveByUsername($username)) {
return false;
}
return $user->validatePassword($password);
}
public function getUserDetails($username): array
{
$user = self::getRepository()->findActiveByUsername($username);
return ['user_id' => $user->id];
}
private static function getRepository(): UserReadRepository
{
return \Yii::$container->get(UserReadRepository::class);
}
private static function getOauth(): Module
{
return Yii::$app->getModule('oauth2');
}
}