Закрыть окно авторизации Yandex ID

Рейтинг: 1Ответов: 1Опубликовано: 02.08.2023

При клике на кнопку "Войти как" открывается новое окно в браузере, получаем данные пользователя и сохраняем у себя. Как закрывать это окно и редиректить на другую страницу?

index.php

<!doctype html>
<html lang="ru">

<head>
    <meta charSet="utf-8" />
    <meta name='viewport' content='width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, shrink-to-fit=no, viewport-fit=cover'>
    <meta http-equiv='X-UA-Compatible' content='ie=edge'>
    <style>
        html,
        body {
            background: #eee;
        }
    </style>
    <script src="https://yastatic.net/s3/passport-sdk/autofill/v1/sdk-suggest-with-polyfills-latest.js"></script>

</head>

<body>
<script>
    window.onload = function() {
        window.YaAuthSuggest.init({
                client_id: 'ид',
                response_type: 'token',
                redirect_uri: 'https://сайт/auth/yandex/get_token.php'
            },
            'https://сайт', {
                view: 'button',
                parentId: 'container',
                buttonView: 'main',
                buttonTheme: 'light',
                buttonSize: 'm',
                buttonBorderRadius: 0
            }
        )
            .then(function(result) {
                return result.handler();
            })
            .then(function(data) {
                console.log('Сообщение с токеном: ', data);
                document.body.innerHTML += `Сообщение с токеном: ${JSON.stringify(data)}`;
            })
            .catch(function(error) {
                console.log('Что-то пошло не так: ', error);
                document.body.innerHTML += `Что-то пошло не так: ${JSON.stringify(error)}`;
            });
    };
</script>

</body>

</html>

authorize.php

<?php
require_once $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php';
global $USER;
define('URL', 'https://login.yandex.ru/info?');


function get_data(){
    //Запрос данных у яндекса.
    $token = ($_GET['token']);
    $token = explode('=', $token)[1];
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, URL);
    curl_setopt($ch,  CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        'Authorization: OAuth ' . $token,
        'Content-type: text/html',
        'charset=UTF-8',
    ]);
    $response = curl_exec($ch);
    if (curl_errno($ch)){
        die(curl_errno($ch));
    }
    $json = json_decode($response,true);
    return $json;
}

if ($USER->IsAuthorized()){
    LocalRedirect('/personal/index.php');
}

$data = get_data();
if (!$data['default_email']){
    die;
};
$fields = [
    "NAME" => $data['first_name'] ? $data['first_name'] : false,
    'LAST_NAME' => $data['last_name'] ? $data['last_name'] : false,
    'LOGIN' => $data['default_email'] ? $data['default_email'] : false,
    'PHONE_NUMBER' => $data['default_phone'] ? ($data['default_phone'])['number'] : false,
    'EMAIL' => $data['default_email'] ? $data['default_email'] : false,
];
$user = CUser::GetList(($by="id"), ($order="desc"), // Ищем пользователя по почте 
        ["EMAIL" => $fields['EMAIL']]) ->fetch();
if (!$user){
    $userbyphone = \Bitrix\Main\UserPhoneAuthTable::getList($parameters = [
        'filter'=> ["PHONE_NUMBER" => $fields['PHONE_NUMBER']] // Ищем пользователя по телефону
    ]) -> fetch();
    if (!$userbyphone){
        // Пытаемся создать пользователя
        $user = new CUser;
        $password = randString(12);
        $ID = $user->Add([
            'LOGIN' => $fields['EMAIL'],
            'NAME' => $fields['NAME'],
            'LAST_NAME' => $fields['LAST_NAME'],
            'EMAIL' => $fields['EMAIL'],
            'PASSWORD' => $password,
            'CONFIRM_PASSWORD' => $password,
            'PHONE_NUMBER' => $fields['PHONE_NUMBER'],
            'ACTIVE' => 'Y',
            "GROUP_ID" => [3, 4, 6],
            'PERSONAL_PHONE' => $fields['PHONE_NUMBER']]
        );
        if (!$ID){
            die($ID->LAST_ERROR);
        }
    }
    else {
        $ID = $userbyphone['USER_ID'];
    }
}
else{
    $ID = $user['ID'];
}
$auResult = $USER->Authorize($ID); // Авторизируем пользователя
if (!$auResult){
    die('Ошибка авторизации');
}

LocalRedirect('/personal/index.php');
require_once $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/epilog_after.php';

get_token.php

<script language="javascript">
    var hash = window.location.hash.substring(1);
    window.location.href='authorize.php?display=popup&token=' + hash;
</script>

Ответы

▲ 0

Может на странице на которую редиректишся и которая принимает токен нужно установить YaSendSuggestToken(origin, extraData) https://yandex.ru/dev/id/doc/ru/suggest/script-sdk-suggest-token