- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/lib/controller/qrcodeauth.php
- Класс: BitrixMainControllerQrCodeAuth
- Вызов: QrCodeAuth::pushToken
public function pushToken($siteId, $uniqueId, $channelTag, $redirectUrl = '', $currentUrl = null)
{
if ($siteId == '' || $uniqueId == '' || $channelTag == '')
{
$this->addError(new MainError(Loc::getMessage('qrcodeauth_error_request'), 'ERR_PARAMS'));
return null;
}
$event = new BitrixMainEvent(
'main',
'OnPushQrCodeAuthToken',
[
'siteId' => $siteId,
'uniqueId' => $uniqueId,
'channelTag' => $channelTag,
'redirectUrl' => $redirectUrl,
]
);
$event->send();
foreach ($event->getResults() as $eventResult)
{
if ($eventResult->getType() === MainEventResult::ERROR)
{
$error = $eventResult->getParameters()['error'] ?? null;
if ($error instanceof MainError)
{
$this->addError($error);
}
if (is_string($error) && $error !== '')
{
$this->addError(new MainError($error, 'ERR_FROM_EVENT'));
}
return null;
}
return true;
}
if ($uniqueId !== static::getUniqueId())
{
$this->addError(new MainError(Loc::getMessage('qrcodeauth_error_unique_id'), 'ERR_UNIQUE_ID'));
return null;
}
if (!$this->isAllowed())
{
return null;
}
$channel = PullModelChannel::createWithTag($channelTag);
$url = $currentUrl ?? MainContext::getCurrent()->getRequest()->getRequestedPage();
$token = CUser::GetHitAuthHash($url, false, $siteId);
if ($token === false)
{
$token = CUser::AddHitAuthHash($url, false, $siteId, 60);
}
PullEvent::add(
[$channel],
[
'module_id' => 'main',
'command' => 'qrAuthorize',
'expiry' => 60,
'params' => [
'token' => $token,
'redirectUrl' => $redirectUrl,
],
]
);
return true;
}