1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
phoneauth.php
См. документацию.
1<?php
8namespace Bitrix\Main\Controller;
9
10use Bitrix\Main;
11use Bitrix\Main\Component;
12use Bitrix\Main\Localization\Loc;
13use Bitrix\Main\Authentication;
14use Bitrix\Main\Authentication\Method;
15
17{
18 const SIGNATURE_SALT = 'phone_auth_sms';
19
20 public function resendCodeAction($signedData)
21 {
22 if(($params = static::extractData($signedData)) === false)
23 {
24 $this->addError(new Main\Error(Loc::getMessage("main_register_incorrect_request"), "ERR_SIGNATURE"));
25 return null;
26 }
27 if($params["phoneNumber"] == '')
28 {
29 $this->addError(new Main\Error(Loc::getMessage("main_register_incorrect_request"), "ERR_PARAMS"));
30 return null;
31 }
32 if($params["smsTemplate"] == '')
33 {
34 $params["smsTemplate"] = "SMS_USER_CONFIRM_NUMBER";
35 }
36
37 $result = \CUser::SendPhoneCode($params["phoneNumber"], $params["smsTemplate"]);
38
39 if(!$result->isSuccess())
40 {
41 $this->addErrors($result->getErrors());
42 return null;
43 }
44
45 return [
46 'DATA_SIGN' => static::signData([
47 'phoneNumber' => $params["phoneNumber"],
48 'smsTemplate' => $params["smsTemplate"]
49 ]),
50 'DATE_SEND' => \CUser::PHONE_CODE_RESEND_INTERVAL,
51 ];
52 }
53
54 public function confirmAction(string $code, string $signedData)
55 {
56 global $USER;
57
58 try
59 {
60 $signer = new Main\Security\Sign\Signer();
61 $userId = $signer->unsign($signedData, static::SIGNATURE_SALT);
62 }
63 catch(\Bitrix\Main\SystemException $exception)
64 {
65 $this->addError(new Main\Error(Loc::getMessage('main_register_incorrect_request'), 'ERR_SIGNATURE'));
66
67 return null;
68 }
69
70 if (!preg_match('/^[0-9]{6}$/', $code))
71 {
72 $this->addError(new Main\Error(Loc::getMessage('main_err_confirm_code_format'), 'ERR_CONFIRM_CODE'));
73
74 return null;
75 }
76
78 'filter' => [
79 '=USER_ID' => $userId
80 ],
81 'select' => ['USER_ID', 'PHONE_NUMBER', 'USER.ID', 'USER.ACTIVE'],
82 ])->fetchObject();
83
84 if (!$phoneRecord)
85 {
86 $this->addError(new Main\Error(Loc::getMessage('main_register_no_user'), 'ERR_NOT_FOUND'));
87
88 return null;
89 }
90
91 if (\CUser::VerifyPhoneCode($phoneRecord->getPhoneNumber(), $code))
92 {
93 if($phoneRecord->getUser()->getActive() && !$USER->IsAuthorized())
94 {
96 ->setUserId($userId)
97 ->setMethod(Method::PhoneCode)
98 ;
99 $USER->Authorize($context);
100 }
101
102 return true;
103 }
104 else
105 {
106 $this->addError(new Main\Error(Loc::getMessage('main_err_confirm'), 'ERR_CONFIRM_CODE'));
107
108 return null;
109 }
110 }
111
112 public function configureActions()
113 {
114 return [
115 'resendCode' => [
116 '-prefilters' => [
117 Main\Engine\ActionFilter\Authentication::class,
118 ],
119 ],
120 'confirm' => [
121 '-prefilters' => [
122 Main\Engine\ActionFilter\Authentication::class,
123 ],
124 ],
125 ];
126 }
127
133 public static function signData(array $data)
134 {
135 return Component\ParameterSigner::signParameters(self::SIGNATURE_SALT, $data);
136 }
137
143 public static function extractData($signedData)
144 {
145 try
146 {
147 return Component\ParameterSigner::unsignParameters(self::SIGNATURE_SALT, $signedData);
148 }
149 catch(Main\SystemException $exception)
150 {
151 return false;
152 }
153 }
154}
if(!is_object($USER)||! $USER->IsAuthorized()) $userId
Определения check_mail.php:18
static signParameters($componentName, $parameters)
Определения parametersigner.php:19
static unsignParameters($componentName, $signedParameters)
Определения parametersigner.php:37
const SIGNATURE_SALT
Определения phoneauth.php:18
confirmAction(string $code, string $signedData)
Определения phoneauth.php:54
resendCodeAction($signedData)
Определения phoneauth.php:20
static extractData($signedData)
Определения phoneauth.php:143
static signData(array $data)
Определения phoneauth.php:133
addError(Error $error)
Определения controller.php:1070
addErrors(array $errors)
Определения controller.php:1083
Определения error.php:15
static getList(array $parameters=array())
Определения datamanager.php:431
$data['IS_AVAILABLE']
Определения .description.php:13
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$result
Определения get_property_values.php:14
global $USER
Определения csv_new_run.php:40
$context
Определения csv_new_setup.php:223
if(!is_null($config))($config as $configItem)(! $configItem->isVisible()) $code
Определения options.php:195
Определения culture.php:9
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']
Определения template.php:799