Решение для Web приложения или сайта
Для реализации в Web можно использовать открытие страницы браузера и делать обработку на момент ее закрытия.
Алгоритм работы
- Пользователь нажимаем войти через соц. сеть
- Открывается окно с ссылкой на авторизацию
- На событие закрытие окна авторизации (оно будет закрыто автоматически) делаем обработку с key для получения данных или запроса на сервер.
Пример JavaScript кода
//Пример функции генерации уникального ключа
function getAlphaNumericRandom = (len){
if (len == undefined || len <= 0) {
len = 1;
}
var characters =
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
var result = '';
var iffirst = 0;
for (var i = 0; i < len; i++) {
if (i == 0) {
iffirst = 10;
} else {
iffirst = 0;
}
result +=
characters[Math.round(Math.random() * (characters.length - iffirst - 1))];
}
return result;
};
function generateUUID = (length) => {
var baseStr = '';
if (length) {
for (var i = 0; i < length; i++) baseStr += 'x';
} else {
baseStr = 'xxxxxxxxxx';
}
var d = new Date().getTime();
var uuid = baseStr.replace(/[xy]/g, function (c) {
var r = (d + Math.random() * 16) % 16 | 0;
d = Math.floor(d / 16);
return (c == 'x' ? r : (r & 0x3) | 0x8).toString(16);
});
return uuid;
};
//-----------------------------------
let key = new Date().getTime() + '-' + generateUUID(256) + '-' + getAlphaNumericRandom(100);
let type = "vk";
let win = window.open(
`https://auth4app.com/auth?soc=${type}&key=${key}`,
'_blank'
);
const interval = setInterval(() => {
if (win && win.closed) {
clearInterval(interval);
//Делаем запрос на сервер с key, на котором получаем данные через метод /hash
//Или получаем данные локально через метод /hash
}
}, 500);
No Comments