Почему auth0 возвращает parseHash неопределенный? - PullRequest
0 голосов
/ 23 февраля 2019

Я был новичком в auth0 , когда пытался поэкспериментировать с auth0's parseHash .Меня удивило, что как-то эта функция возвращает ноль.Я попытался заглянуть внутрь исходного кода , похоже, эта функция пытается в конечном итоге что-то вернуть.

Вот часть кода, которая меня смутила:

import React from 'react';
import { Link } from '@reach/router';
import './Callback.sass';

export const Callback = ({ auth, navigate }) => {
  let result = auth.parseHash((err, authResult) => {
    if (err) {
      return (
        <div className="error">
          <h1>{err.error}</h1>
          <p>{err.errorDescription}</p>
          <Link to="/">Home</Link>
        </div>
      );
    } else {
      console.log({ authResult });
      return 'profile';
      // localStorage.setItem('authResult', JSON.stringify(authResult));
      // navigate('/profile');
    }
  });
  console.log({ result });
  if (result) return result;
  return <React.Fragment />;
};

Вот результат: enter image description here

Что, на мой взгляд, действительно сбивает с толку.Консоль регистрирует часть 'authResult', но result - это undefined.(Я даже тестировал с async await, все еще не могу получить то, что ожидаю).

В настоящее время я просто обертываю результат, чтобы обойти это.

Это ошибка?Или я не правильно использую этот метод?

Ответы [ 2 ]

0 голосов
/ 24 мая 2019

Ваш console.log({ result });

работает до

let result = auth.parseHash((err, authResult) => {

Так что обернуть его в Promise может помочь.

0 голосов
/ 24 мая 2019

Я также новичок в auth0 и сегодня столкнулся с той же ошибкой.

Решил, обернув parseHash в Обещание:

/* ... */

function handleAuthentication() {
  // wrap parseHash in a Promise
  return new Promise((resolve, reject) => {
    auth0.parseHash((err, authResult) => {
      if (authResult && authResult.accessToken && authResult.idToken) {
        resolve(authResult)
      } else if (err) {
        throw new Error(`Error: ${err.error}. Check the console for further details.`);
      } else {
        throw new Error(`Unknown error`);
      }
    })
  })
}

// wait for the Promise to resolve and log the result
handleAuthentication()
  .then(function(result) {
    console.log(result);
  });

Проблема в вашем коде в том, что вы ожидаете, что parseHash вернет результат напрямую, но это не так (в строке 22).Вместо этого он вызывает функцию обратного вызова, которую вы правильно зарегистрировали, и, следовательно, вы получите ожидаемый результат внутри функции обратного вызова, но не за ее пределами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...