Ajuda para fazer integração do Javascript com PHP [RESOLVIDO]

1. Ajuda para fazer integração do Javascript com PHP [RESOLVIDO]

Daniel P. L. Almeida
daniel.uramg

(usa Outra)

Enviado em 20/06/2018 - 11:23h

Olá pessoal,

estou desenvolvendo uma aplicação simples para uso da API do MercadoLivre que será 99% em JavaScript, como a SDK JS do ML está descontinuada a uns anos, somente a parte de autenticação fiz em PHP.

Pretendo fazer a aplicação toda em JS para não consumir recursos do servidor, no primeiro acesso o app requisita o Aceess Token do servidor e armazena ele localmente, daí então todas as requisições que serão feitas à API do ML será feita via Ajax.

O problema está sendo em como o Javascript vai requisitar o Access Token ao meu PHP do usuário em específico que estará acessando, no meu protótipo eu armazenei numa variável minha ID do ML, então passo esta ID para o servidor para requisitar o token:

    //requisita o access_token
var user_id = '0000'; //Minha ID do ML
var expires_in = GM_getValue('expires_in');
var agora = Math.round(new Date().getTime()/1000);
if (expires_in < agora || !expires_in){
$.getJSON("https://meusite.com/renew_token.php?user_id=" + user_id, function(retorno){
//se recebeu o token, grava ele
if (retorno.access_token){
GM_setValue('access_token', retorno.access_token);
GM_setValue('expires_in', retorno.expires_in);
}
//se não existir o token provavelmente o usuario nunca se autenticou, então abre a janela para autorizar o app
else{
window.open("https://meusite.com/login.php","janela1","width=600, height=600, directories=no, location=no, menubar=no, scrollbars=no, status=no, toolbar=no, resizable=no");
}
});
}
//requisita o access_token


O 'renew_token.php' recebe a ID do usuário e com esta ID ele pega o 'refresh_token' deste usuário que está armazenado para requisitar um 'access_token' à API do ML e retorna este token em formato Json para o JS, não estou conseguindo pensar numa forma é de o PHP identificar de que usuário se trata sem eu passar esta ID como estou fazendo.

Se eu acessar diretamente o https://..../login.php ele me retorna o Token correto pois a SDK reconhece o usuário autenticado no navegador, porém também não consegui fazer este retorno "voltar" para o JavaScript.

Tentei requisitar o ID do usuário direto de uma página do ML que contém esta informação, mas é bloqueado pela política de CORS.

Alguém consegue me dar um rumo de como tentar resolver isso?



  


2. Resolvido

Daniel P. L. Almeida
daniel.uramg

(usa Outra)

Enviado em 04/07/2018 - 10:50h

Ao acessar a aplicação verifica se existe o user_id armazenado, caso não exista abre a janela de autenticação (login.php), no login.php após se autenticar com a API retorna

echo "<script>
window.opener.auth('$id', '$nickname', '$access_token', '$expires_in');
</script>
<body onload='javascript: window.close()'></body>";


Aplicativo armazena os dados recebidos em cookie
   function auth(user_id, nickname, access_token, expires_in){
console.log('Usuário autenticado e dados armazenados.');
gerarCookie("user_id", user_id, 365);
gerarCookie("nickname", nickname, 365);
gerarCookie("access_token", access_token, 1);
gerarCookie("expires_in", expires_in, 1);
location.reload();
}


Agora já tendo armazenado o ID do usuário e o expires_in consigo comparar o tempo de vencimento do token para renová-lo caso necessário.
	var debug = 1;
var user_id = lerCookie("user_id");
var nickname = lerCookie("nickname");
var expires_in = lerCookie('expires_in');
var access_token = lerCookie('access_token');
var agora = Math.round(new Date().getTime()/1000);

if(! user_id){
if (debug == 1) console.log('Não existe id, abre janela para autenticação');
var janela = window.open("login.php","janela1","width=400, height=400, directories=no, location=no, menubar=no, scrollbars=no, status=no, toolbar=no, resizable=no");
if(janela==null){
alert('Por favor desative o Bloqueador de Pop-ups para conseguir se autenticar.');
}
}else{
$('h1').before('<p id="loged" align="right">'+nickname+' <a href="#" id="logout">Sair</a></p>');
//requisita o access_token
if (expires_in < agora){
if (debug == 1) console.log('Token venceu, renovar..');
if (debug == 1) console.log('Agora: ' + agora);
if (debug == 1) console.log('expires_in: ' + expires_in);
$.getJSON("renew_token.php?user_id=" + user_id, function(retorno){
//se recebeu o token, grava ele
if (retorno.access_token){
gerarCookie("access_token", retorno.access_token, 1);
gerarCookie("expires_in", retorno.expires_in, 1);
location.reload();
//se não existir o token provavelmente o usuario nunca se autenticou, então abre a janela para autorizar o app
}else{
if (debug == 1) console.log('Token não existe, abre janela para autenticar');
window.open("login.php","janela1","width=400, height=400, directories=no, location=no, menubar=no, scrollbars=no, status=no, toolbar=no, resizable=no");
}
});
}
//requisita o access_token
}







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts