Issue #21 usando refresh_token para refrescar el access_token
This commit is contained in:
@@ -30,7 +30,7 @@ export const redirect_to_code = () => {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const get_auth = async (code, code_verifier) => {
|
export const do_auth = async (code, code_verifier) => {
|
||||||
const params = {
|
const params = {
|
||||||
code: code,
|
code: code,
|
||||||
code_verifier: code_verifier,
|
code_verifier: code_verifier,
|
||||||
@@ -44,30 +44,59 @@ export const get_auth = async (code, code_verifier) => {
|
|||||||
return response.data
|
return response.data
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const do_refresh = async (token) => {
|
||||||
|
const params = {
|
||||||
|
grant_type: 'refresh_token',
|
||||||
|
refresh_token: token,
|
||||||
|
client_id: client_id,
|
||||||
|
};
|
||||||
|
|
||||||
|
const url = `${oauth_url}/token/`
|
||||||
|
const response = await axios.post(url, new URLSearchParams(params));
|
||||||
|
return response.data;
|
||||||
|
}
|
||||||
|
|
||||||
export const auth = async (params) => {
|
export const auth = async (params) => {
|
||||||
// Primera fase, obtener código
|
// Como response se puede obtener desde refresh o desde un auth regular, se almacena al inicio
|
||||||
// Si es que no se tiene se tiene que redirigir a la pagina de oauth que entregara el código
|
let response;
|
||||||
// a la pagina de redirect como parámetro GET, este trabajo lo hace redirect y se volverá a
|
|
||||||
// ejecutar este método cuando se entre a esa ruta
|
// Preámbulo, puede existir un refresh_token usable asi que debe hacer el flow de renew
|
||||||
if (!window.localStorage.getItem('code_verifier')) {
|
if (window.localStorage.getItem('refresh_token')) {
|
||||||
redirect_to_code();
|
const expires = new Date(window.localStorage.getItem('expires'));
|
||||||
return {status: 'redirect_to_code'};
|
|
||||||
|
// Si es que el token aun es valido se llama a refresh
|
||||||
|
if (expires > new Date()) {
|
||||||
|
const refresh_token = window.localStorage.getItem('refresh_token');
|
||||||
|
response = await do_refresh(refresh_token);
|
||||||
|
console.log('refresh response', response);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Segunda fase, se llama a auth con los parámetros de la ruta.
|
if (!response) {
|
||||||
// Estos parámetros puede contener un error, en ese caso se elimina el code_verifier del storage
|
// Primera fase, obtener código
|
||||||
// porque no sera util y fallo la request.
|
// Si es que no se tiene se tiene que redirigir a la pagina de oauth que entregara el código
|
||||||
if (params.error) {
|
// a la pagina de redirect como parámetro GET, este trabajo lo hace redirect y se volverá a
|
||||||
window.localStorage.clear()
|
// ejecutar este método cuando se entre a esa ruta
|
||||||
return {status: 'code_error', value: params.error};
|
if (!window.localStorage.getItem('code_verifier')) {
|
||||||
|
redirect_to_code();
|
||||||
|
return {status: 'redirect_to_code'};
|
||||||
|
}
|
||||||
|
|
||||||
|
// Segunda fase, se llama a auth con los parámetros de la ruta.
|
||||||
|
// Estos parámetros puede contener un error, en ese caso se elimina el code_verifier del storage
|
||||||
|
// porque no sera util y fallo la request.
|
||||||
|
if (params.error) {
|
||||||
|
window.localStorage.clear()
|
||||||
|
return {status: 'code_error', value: params.error};
|
||||||
|
}
|
||||||
|
|
||||||
|
// Teniendo el código en los parámetros se intenta obtener el código de autorización.
|
||||||
|
const code = params.code;
|
||||||
|
const code_verifier = window.localStorage.getItem('code_verifier');
|
||||||
|
response = await do_auth(code, code_verifier)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Teniendo el código en los parámetros se intenta obtener el código de autorización.
|
// Puede que la respuesta sea errónea por varias razones
|
||||||
const code = params.code;
|
|
||||||
const code_verifier = window.localStorage.getItem('code_verifier');
|
|
||||||
const response = await get_auth(code, code_verifier)
|
|
||||||
|
|
||||||
// Puede que la respuesta sea erronea por varias razones
|
|
||||||
if (response.error) {
|
if (response.error) {
|
||||||
return {status: response.error}
|
return {status: response.error}
|
||||||
}
|
}
|
||||||
@@ -101,7 +130,7 @@ export const logout = async (access_token) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
window.localStorage.clear();
|
window.localStorage.clear();
|
||||||
|
|
||||||
const url = `${oauth_url}/revoke_token/`;
|
const url = `${oauth_url}/revoke_token/`;
|
||||||
const response_access_revoke = await axios.post(url, new URLSearchParams(revoke_access_params));
|
const response_access_revoke = await axios.post(url, new URLSearchParams(revoke_access_params));
|
||||||
const response_refresh_revoke = await axios.post(url, new URLSearchParams(revoke_refresh_params));
|
const response_refresh_revoke = await axios.post(url, new URLSearchParams(revoke_refresh_params));
|
||||||
|
|||||||
Reference in New Issue
Block a user