Реорганизована выдача JWT токенов

Добавлен механизм сохранения сессий и refresh_token
This commit is contained in:
ErickSkrauch
2016-05-30 02:44:17 +03:00
parent 98c01625d1
commit bdc96d82c1
34 changed files with 676 additions and 73 deletions

View File

@@ -3,7 +3,6 @@ namespace common\models;
use common\components\UserPass;
use common\validators\LanguageValidator;
use damirka\JWT\UserTrait as UserJWTTrait;
use Ely\Yii2\TempmailValidator;
use Yii;
use yii\base\InvalidConfigException;
@@ -29,15 +28,14 @@ use yii\db\ActiveRecord;
*
* Отношения:
* @property EmailActivation[] $emailActivations
* @property OauthSession[] $sessions
* @property OauthSession[] $oauthSessions
* @property UsernameHistory[] $usernameHistory
* @property AccountSession[] $sessions
*
* Поведения:
* @mixin TimestampBehavior
*/
class Account extends ActiveRecord {
use UserJWTTrait;
const STATUS_DELETED = -10;
const STATUS_REGISTERED = 0;
const STATUS_ACTIVE = 10;
@@ -121,7 +119,7 @@ class Account extends ActiveRecord {
return $this->hasMany(EmailActivation::class, ['account_id' => 'id']);
}
public function getSessions() {
public function getOauthSessions() {
return $this->hasMany(OauthSession::class, ['owner_id' => 'id']);
}
@@ -129,6 +127,10 @@ class Account extends ActiveRecord {
return $this->hasMany(UsernameHistory::class, ['account_id' => 'id']);
}
public function getSessions() {
return $this->hasMany(AccountSession::class, ['account_id' => 'id']);
}
/**
* Метод проверяет, может ли текущий пользователь быть автоматически авторизован
* для указанного клиента без запроса доступа к необходимому списку прав
@@ -144,7 +146,7 @@ class Account extends ActiveRecord {
}
/** @var OauthSession|null $session */
$session = $this->getSessions()->andWhere(['client_id' => $client->id])->one();
$session = $this->getOauthSessions()->andWhere(['client_id' => $client->id])->one();
if ($session !== null) {
$existScopes = $session->getScopes()->members();
if (empty(array_diff(array_keys($scopes), $existScopes))) {