Auth0 Logo

InsiDevCode è distribuito con Licenza Creative Commons Attribuzione — Non commerciale — Condividi allo stesso modo 4.0 Internazionale.
Tutti i contenuti presenti all’interno del blog possono quindi essere utilizzati a patto di citare sempre https://www.insidevcode.eu/ come fonte ed inserire un link o un collegamento visibile.
Permessi ulteriori rispetto alle finalità della presente licenza possono essere disponibili presso Permessi e Blog Policy.
Il team InsiDevCode non è responsabile dei contenuti dei siti in collegamento, della qualità o correttezza dei dati forniti da terzi. Si riserva pertanto la facoltà di rimuovere informazioni ritenute offensive o contrarie al buon costume. Eventuali segnalazioni possono essere inviate a insidevcode@gmail.com.
© 2015-2023 — InsiDevCode — Tutti i diritti riservati
LINK UTILI
- Come Fare le cose bene?
- Team
- Info InsiDevCode
- Privacy Policy
- Cookie Policy (UE)
INFO
Tags
Tag
Gestisci Consenso Cookie
Questo Sito utilizza alcuni tipi di cookie tecnici necessari per il corretto funzionamento dello stesso, nonché cookie statistici e di profilazione anche di terze parti. Se vuoi saperne di più o negare il consenso a tutti o solo ad alcuni cookie consulta la Cookie Policy. Cliccando su Accetta, acconsenti all’utilizzo dei Cookie.
Funzionale Funzionale Sempre attivo
L’archiviazione tecnica o l’accesso sono strettamente necessari al fine legittimo di consentire l’uso di un servizio specifico esplicitamente richiesto dall’abbonato o dall’utente, o al solo scopo di effettuare la trasmissione di una comunicazione su una rete di comunicazione elettronica.
Preferenze Preferenze
L’archiviazione tecnica o l’accesso sono necessari per lo scopo legittimo di memorizzare le preferenze che non sono richieste dall’abbonato o dall’utente.
Statistiche Statistiche
L’archiviazione tecnica o l’accesso che viene utilizzato esclusivamente per scopi statistici. L’archiviazione tecnica o l’accesso che viene utilizzato esclusivamente per scopi statistici anonimi. Senza un mandato di comparizione, una conformità volontaria da parte del vostro Fornitore di Servizi Internet, o ulteriori registrazioni da parte di terzi, le informazioni memorizzate o recuperate per questo scopo da sole non possono di solito essere utilizzate per l’identificazione.
Marketing Marketing
L’archiviazione tecnica o l’accesso sono necessari per creare profili di utenti per inviare pubblicità, o per tracciare l’utente su un sito web o su diversi siti web per scopi di marketing simili.
React: пример использования Auth0 для разработки сервиса аутентификации/авторизации
В этой статье я покажу вам, как создать полноценный сервис для аутентификации и авторизации (далее — просто сервис) с помощью Auth0 .
Auth0 — это платформа, предоставляющая готовые решения для разработки сервисов любого уровня сложности. Auth0 поддерживается командой, стоящей за разработкой JWT (JSON Web Token/веб-токен в формате JSON ). Это вселяет определенную уверенность в безопасности Auth0-сервисов .
Бесплатная версия Auth0 позволяет регистрировать до 7000 пользователей.
В этой статье я писал о том, что такое JWT , и как разработать собственный сервис с нуля.
Знакомство с Auth0 можно начать отсюда.
Исходный код Auth0 SDK , который мы будем использовать для разработки приложения, можно найти здесь.
Исходный код проекта, который мы будем разрабатывать, находится здесь.
В статье я расскажу только о самых основных возможностях, предоставляемых Auth0 .
В примерах и на скриншотах ниже вы увидите реальные чувствительные данные/sensitive data . Это не означает, что вы сможете их использовать. После публикации статьи сервис будет удален.
Подготовка и настройка проекта
Создаем директорию, переходим в нее и создаем клиента — шаблон React/TypeScript-приложения с помощью Create React App :
mkdir react-auth0 cd react-auth0 # cd !$ yarn create react-app client --template typescript # or npx create-react-app .
Создаем директорию для сервера, переходим в нее и инициализируем Node.js-приложение :
mkdir server cd server yarn init -yp # or npm init -y
Создаем аккаунт Auth0 :
Создаем одностраничное приложение/single page application на вкладке Applications/Applications :
Переходим в раздел Settings :
Создаем файл .env в директории client и записываем в него значения полей Domain и Client ID :
REACT_APP_AUTH0_DOMAIN = auth0-test-app.eu.auth0.com REACT_APP_AUTH0_CLIENT_ID = Ykv47YaNC3naGvfljFt8LyhzVPRPZCJY
Прописываем URL клиента в полях Allowed Callback URLs , Allowed Logout URLs и Allowed Web Origins :
Создаем API на вкладке Applications/API :
Переходим в раздел Settings :
Записываем значение поля Identifier и URL сервера в файл .env :
REACT_APP_AUTH0_AUDIENCE='https://auth0-test-app' REACT_APP_SERVER_URI='http://localhost:4000/api'
Создаем файл .env в директории server следующего содержания:
AUTH0_DOMAIN='auth0-test-app.eu.auth0.com' AUTH0_AUDIENCE='https://auth0-test-app' CLIENT_URI='http://localhost:3000'
Клиент
Переходим в директорию client и устанавливаем дополнительные зависимости:
cd client # зависимости для продакшна yarn add @auth0/auth0-react react-router-dom react-loader-spinner # зависимость для разработки yarn add -D sass
- @auth0/auth0-react — Auth0 SDK для React-приложений
- react-router-dom — библиотека для маршрутизации
- react-loader-spinner — индикатор загрузки
- sass — CSS-препроцессор
Структура директории src :
- api - messages.ts - components - AuthButton - LoginButton - LoginButton.tsx - LogoutButton - LogoutButton.tsx - AuthButton.tsx - Boundary - Error - error.scss - Error.tsx - Spinner - Spinner.tsx - Boundary.tsx - Navbar - Navbar.tsx - pages - AboutPage - AboutPage.tsx - HomePage - HomePage.tsx - MessagePage - message.scss - MessagePage.tsx - ProfilePage - profile.scss - ProfilePage.tsx - providers - AppProvider.tsx - Auth0ProviderWithNavigate.tsx - router - AppRoutes.tsx - AppLinks.tsx - styles - _mixins.scss - _variables.scss - types - index.d.ts - utils - createStore.tsx - App.scss - App.tsx - index.tsx .
Логика работы приложения:
- в панели для навигации имеется кнопка для авторизации;
- кнопка рендерится условно в зависимости от статуса авторизации пользователя;
- если пользователь не авторизован, при нажатии кнопки он перенаправляется в Auth0 для выполнения входа в систему;
- если пользователь авторизован, при нажатии кнопки выполняется выход из системы;
- в приложении имеется 4 страницы: HomePage , AboutPage , ProfilePage и MessagePage ;
- первые две страницы находятся в открытом доступе;
- последние две — требуют авторизации;
- при переходе неавторизованного пользователя на страницу ProfilePage , он перенаправляется в Auth0 ;
- после входа в систему пользователь возвращается на страницу ProfilePage , где видит информацию о своем профиле;
- на странице MessagePage пользователь может отправить два запроса к серверу: на получение открытого сообщения и на получение защищенного сообщения;
- если пользователь не авторизован, при отправке запроса на получение защищенного сообщения возвращается ошибка.
Дальше я буду рассказывать только о том, что касается непосредственно Auth0 .
Интеграция приложения с Auth0
Для интеграции приложения с Auth0 используется провайдер Auth0Provider .
Для того, чтобы иметь возможность переправлять пользователя на кастомную страницу после входа в систему, дефолтный провайдер необходимо апгрейдить следующим образом ( providers/Auth0ProviderWithNavigate ):
// импортируем дефолтный провайдер import < Auth0Provider >from '@auth0/auth0-react' // хук для выполнения программной навигации import < useNavigate >from 'react-router-dom' import < Children >from 'types' const domain = process.env.REACT_APP_AUTH0_DOMAIN as string const clientId = process.env.REACT_APP_AUTH0_CLIENT_ID as string const audience = process.env.REACT_APP_AUTH0_AUDIENCE as string const Auth0ProviderWithNavigate = (< children >: Children) => < const navigate = useNavigate() // функция, вызываемая после авторизации const onRedirectCallback = (appState: < returnTo?: string >) => < // путь для перенаправления указывается в свойстве `returnTo` // по умолчанию пользователь возвращается на текущую страницу navigate(appState?.returnTo || window.location.pathname) >return ( clientId= // данная настройка нужна для взаимодействия с сервером audience= redirectUri= onRedirectCallback= > ) > export default Auth0ProviderWithNavigate
С сигнатурой провайдера можно ознакомиться здесь.
Оборачиваем компоненты приложения в провайдер ( index.tsx ):
import React from 'react' import ReactDOM from 'react-dom' import < BrowserRouter >from 'react-router-dom' import Auth0ProviderWithNavigate from 'providers/Auth0ProviderWithNavigate' import < AppProvider >from 'providers/AppProvider' import App from './App' ReactDOM.render( * провайдер маршрутизации */> * провайдер авторизации */> * провайдер состояния */> , document.getElementById('root') )
Вход и выход из системы
Для входа в систему используется метод loginWithRedirect , а для выхода — метод logout . Оба метода возвращаются хуком useAuth0 . useAuth0 также возвращает логическое значение isAuthenticated (и много чего еще) — статус авторизации, который можно использовать для условного рендеринга кнопок.
Вот как реализована кнопка для аутентификации ( components/AuthButton/AuthButton.tsx ):
// импортируем хук import < useAuth0 >from '@auth0/auth0-react' import < LoginButton >from './LoginButton/LoginButton' import < LogoutButton >from './LogoutButton/LogoutButton' export const AuthButton = () => < // получаем статус авторизации const < isAuthenticated >= useAuth0() return isAuthenticated ? : >
Кнопка для входа в систему ( components/AuthButton/LoginButton/LoginButton.tsx ):
// импортируем хук import < useAuth0 >from '@auth0/auth0-react' export const LoginButton = () => < // получаем метод для входа в систему const < loginWithRedirect >= useAuth0() return ( ) >
Кнопка для выхода из системы ( components/AuthButton/LogoutButton/LogoutButton.tsx ):
// импортируем хук import < useAuth0 >from '@auth0/auth0-react' export const LogoutButton = () => < // получаем метод для выхода из системы const < logout >= useAuth0() return ( ) >
С сигнатурой хука можно ознакомиться здесь.
Состояние авторизации
Состояние авторизации пользователя сохраняется на протяжении времени жизни id_token/токена идентификации . Время жизни токена устанавливается на вкладке Settings приложения в поле ID Token Expiration раздела ID Token и по умолчанию составляет 36 000 секунд или 10 часов:
Токен записывается в куки, которые можно найти в разделе Storage/Cookies вкладки Application инструментов разработчика в браузере:
Это означает, что статус авторизации пользователя сохраняется при перезагрузке страницы, закрытии/открытии вкладки браузера и т.д.
При выходе из системы куки вместе с id_token удаляется.
Создание защищенной страницы
Для защиты страницы от доступа неавторизованных пользователей предназначена утилита withAuthenticationRequired . Хук useAuth0 , кроме прочего, возвращает объект user с нормализованными данными пользователя.
Страница ProfilePage реализована следующим образом ( pages/ProfilePage/ProfilePage.tsx ):
import './profile.scss' import < useAuth0, withAuthenticationRequired >from '@auth0/auth0-react' import < Spinner >from 'components/index.components' // оборачиваем код компонента в утилиту export const ProfilePage = withAuthenticationRequired( () => < // получаем данные пользователя const < user >= useAuth0() return ( <> Profile Page
alt= /> >) >, < // обе настройки являются опциональными returnTo: '/profile', onRedirecting: () => > )
С сигнатурой утилиты можно ознакомиться здесь.
Проверка работоспособности клиента
Находясь в директории client , выполняем команду yarn start или npm start для запуска сервера для разработки:
Нажимаем на кнопку Log In . Попадаем на страницу регистрации/авторизации Auth0 :
По умолчанию предоставляется возможность входа в систему с помощью аккаунта Google ( Google OAuth 2.0 ). Позже мы добавим возможность авторизации с помощью аккаунта GitHub .
Входим в систему. Возвращаемся на главную страницу. Видим, что кнопка Log In сменилась кнопкой Log Out .
Выходим из системы. Пробуем перейти на страницу Profile . Снова попадаем на страницу Auth0 . Входим в систему. Возвращаемся на страницу профиля:
Переходим на вкладку Authentication/Social и нажимаем кнопку Create Connection :
Выбираем GitHub из предложенного списка:
Заходим в профиль GitHub . Переходим в раздел Settings/Developer settings/OAuth Apps и нажимаем на кнопку Register a new application :
Заполняем поля Application name , Homepage URL ( https://ВАШ-ДОМЕН.auth0.com ) и Authorization callback URL ( https://ВАШ-ДОМЕН/login/callback ):
Нажимаем на кнопку Generate a new client secret . Копируем значения полей Client ID и Client secret и вставляем их в соответствующие поля Auth0 :
В разделе Attributes в дополнение к Basic Profile выбираем Email address , а в разделе Permissions — read:user .
Нажимаем на кнопку Create . Подключаем клиентское приложение и API .
Нажимаем на кнопку Try Connection для проверки соединения.
Нажимаем на кнопку Authorize ВАШЕ_ИМЯ .
Получаем сообщение о том, что соединение работает:
Теперь если мы нажмем Log In в приложении, то увидим, что у нас появилась возможность авторизоваться через GitHub :
Что касается Google , то Auth0 предоставляет тестовые ключи, которые должны быть заменены настоящими перед выпуском приложения в продакшн.
Займемся страницей MessagePage и сервером.
Интеграция клиента с сервером
API
Начнем с API ( api/messages.ts ):
// адрес сервера const SERVER_URI = process.env.REACT_APP_SERVER_URI // сервис для получения открытого сообщения export async function getPublicMessage() < let data = < message: '' >try < const response = await fetch(`$/messages/public`) if (!response.ok) throw response data = await response.json() > catch (e) < throw e >finally < return data.message >> // сервис для получения защищенного сообщения // функция принимает `access_token/токен доступа` export async function getProtectedMessage(token: string) < let data = < message: '' >try < const response = await fetch(`$/messages/protected`, < headers: < // добавляем заголовок авторизации с токеном Authorization: `Bearer $` > >) if (!response.ok) throw response data = await response.json() > catch (e) < throw e >finally < return data.message >>
Страница MessagePage ( pages/MessagePage/MessagePage.tsx ).
Импортируем хуки, компонент, провайдер, сервисы и стили:
import < useAuth0 >from '@auth0/auth0-react' import < getProtectedMessage, getPublicMessage >from 'api/messages' import < Boundary >from 'components/Boundary/Boundary' import < useAppSetter >from 'providers/AppProvider' import < useState >from 'react' import './message.scss'
Получаем сеттеры, определяем состояние для сообщения и его типа:
export const MessagePage = () => < const < setLoading, setError >= useAppSetter() const [message, setMessage] = useState('') const [type, setType] = useState('') // TODO >
Для генерации токена доступа ( access_token ) предназначен метод getAccessTokenSilently , возвращаемый хуком useAuth0 :
const < getAccessTokenSilently >= useAuth0()
Определяем функцию для запроса открытого сообщения:
function onGetPublicMessage() < setLoading(true) getPublicMessage() .then(setMessage) .catch(setError) .finally(() =>< setType('public') setLoading(false) >) >
Определяем функцию для получения защищенного сообщения:
function onGetProtectedMessage() < setLoading(true) // генерируем токен и передаем его сервису `getProtectedMessage` getAccessTokenSilently() .then(getProtectedMessage) .then(setMessage) .catch(setError) .finally(() =>< setType('protected') setLoading(false) >) >
Наконец, возвращаем разметку:
return ( Message Page
> > )
Сервер
Переходим в директорию server и устанавливаем зависимости:
# зависимости для продакшна yarn add express helmet cors dotenv express-jwt jwks-rsa # зависимости для разработки yarn add -D nodemon
- express : Node.js-фреймворк для разработки веб-серверов;
- helmet : утилита для установки HTTP-заголовков , связанных с безопасностью. Об этих заголовках можно почитать здесь;
- cors : утилита для установки HTTP-заголовков , связанных с CORS ;
- dotenv : утилита для работы с переменными среды окружения;
- express-jwt : посредник/middleware для валидации JWT через модуль jsonwebtoken ;
- jwks-rsa : утилита для извлечения ключей подписания/signing keys из JWKS (JSON Web Key Set/набор веб-ключей в формате JSON );
- nodemon : утилита для запуска сервера для разработки.
О том, что такое JWKS и для чего он используется, можно почитать здесь.
Пример интеграции jwks-rsa с express-jwt можно найти здесь.
- routes - api.routes.js - messages.routes.js - utils - checkJwt.js - .env - index.js - .
Здесь нас интересуют 2 файла: messages.routes.js и checkJwt.js .
import < Router >from 'express' import < checkJwt >from '../utils/checkJwt.js' const router = Router() router.get('/public', (req, res) => < res.status(200).json(< message: 'Public message' >) >) router.get('/protected', checkJwt, (req, res) => < res.status(200).json(< message: 'Protected message' >) >) export default router
При запросе к api/messages/public возвращается сообщение Public message . При запросе к api/messages/protected выполняется проверка JWT . Данный маршрут (роут) является защищенным. Когда проверка прошла успешно, возвращается сообщение Protected message . В противном случае, утилита возвращает ошибку.
Рассмотрим этого посредника ( utils/checkJwt.js ).
import jwt from 'express-jwt' import jwksRsa from 'jwks-rsa' import dotenv from 'dotenv'
Получаем доступ к переменным среды окружения, хранящимся в файле .env , и извлекаем их значения:
dotenv.config() const domain = process.env.AUTH0_DOMAIN const audience = process.env.AUTH0_AUDIENCE
audience — простыми словами, это аудитория токена, т.е. те, для кого предназначен токен.
export const checkJwt = jwt(< secret: jwksRsa.expressJwtSecret(< cache: true, // ограничение максимального количества запросов rateLimit: true, // 10 запросов в минуту jwksRequestsPerMinute: 10, // обратите внимание на сигнатуру пути jwksUri: `https://$/.well-known/jwks.json` >), // аудитория audience, // тот, кто подписал токен issuer: `https://$/`, // алгоритм, использованный для подписания токена algorithms: ['RS256'] >)
Определяем тип кода сервера (модуль) и команды для запуска сервера в режиме для разработки и в производственном режиме в package.json :
"type": "module", "scripts":
Запускаем сервер для разработки с помощью команды yarn dev или npm run dev и возвращаемся в браузер.
Выходим из системы. Переходим на страницу MessagePage и пытаемся получить открытое сообщение:
Теперь пробуем получить защищенное сообщение:
Получаем сообщение об ошибке, которое говорит о необходимости авторизации.
Авторизуемся и пробуем снова:
Кажется, что наш сервис аутентификации/авторизации работает, как ожидается.
Согласитесь, что Auth0 существенно облегчает выполнение нетривиальной задачи по разработке сервиса аутентификации/авторизации веб-приложения.
Пожалуй, это все, чем я хотел поделиться с вами в данной статье.
Надеюсь, вы нашли для себя что-то интересное и не зря потратили время.
Благодарю за внимание. Happy coding и счастливого Нового года!
Безопасная аутентификация без пароля с использованием Auth0
В этой статье вы узнаете, как настроить аутентификацию без пароля с помощью сервиса Auth0. Auth0 позволяет использовать аутсорс функции аутентификации для вашего приложения.
Что такое Auth0?
Auth0 — это инструмент аутентификации как сервиса, который упрощает реализацию функций, связанных с проверкой подлинности для вашего приложения или сайта. Если вы создали приложение и хотите просто использовать сторонние функции аутентификации и авторизации, то вы должны рассмотреть такой сервис, как Auth0.
Позвольте мне кратко изложить, что Auth0 предлагает:
- единая точка входа
- многофакторная аутентификация
- вход в систему без пароля
- управление пользователями
- и многое другое!
Начальная настройка
В этом разделе мы рассмотрим начальную настройку для подготовки к аутентификации без пароля.
Прежде чем двигаться вперед, обязательно установите Composer, поскольку он будет использоваться для установки актуальных SDK Auth0 с использованием файла composer.json. Кроме того, если вы хотите следовать за примерами в этой статье, то получите бесплатную учетную запись для Auth0.
Давайте начнем с получения клона образца проекта.
git clone https://github.com/auth0-samples/auth0-php-web-app.git .
Установка зависимостей
Для установки зависимостей выполните команду composer install .
cd 00-Starter-Seed
composer install
Согласно файлу composer.json, вы должны установить пакеты vlucas/phpdotenv и auth0/auth0-php.
"name": "auth0/basic-webapp-sample",
"description": "Basic sample for securing a WebApp with Auth0",
"require":
"vlucas/phpdotenv": "2.4.0",
"auth0/auth0-php": "~5.0"
"license": "MIT",
"authors": [
"name": "Martin Gontovnikas",
"email": "martin@gon.to"
"name": "Germán Lena",
"email": "german.lena@gmail.com"
Библиотека vlucas/phpdotenv используется для инициализации переменных среды окружения из файла .env. Таким образом, он позволяет вам отделить конфигурацию от кода, который изменяется в зависимости от среды.
С другой стороны, пакет auth0/auth0-php поможет нам настроить авторизацию в нашем приложении.
Настройка переменных среды
Затем давайте настроим конфигурацию нашего приложения в файле .env. Идем дальше и создаем файл .env, копируя его из файла .env.example.
cp .env.example .env
Он содержит значения конфигурации, которые будут использоваться библиотекой Auth0.
AUTH0_CLIENT_ID=
AUTH0_DOMAIN=
AUTH0_CLIENT_SECRET=
AUTH0_CALLBACK_URL=
AUTH0_AUDIENCE=
Вы можете найти большинство настроек в разделе Applications > Default App > Settings на панели управления Auth0. Обратите внимание, что я использую приложение по умолчанию, созданное системой. Конечно, если хотите, вы можете создать новое приложение.
AUTH0_CALLBACK_URL — это URL-адрес вашего приложения, на который Auth0 будет перенаправлять пользователей после входа в систему и выхода из системы. Значение, заданное в этом поле, должно быть настроено в разделе Allowed Callback URLs в настройках приложения на панели управления Auth0.
Вход в систему без пароля с использованием Email
Чтобы включить вход в систему без пароля с помощью электронной почты, откройте Connections > Passwordless на панели управления Auth0 и включите параметр Email.
В большинстве случаев настройки по умолчанию в разделе Email просто работают из коробки. Конечно, если вы хотите изменить какие-либо настройки, сделайте это. Не забудьте включить приложения, для которых вы хотите аутентификацию без пароля, в Connections > Passwordless > Email > Applications.
При первоначальной настройке мы можем создать файл, который реализует вход без пароля с использованием электронной почты.
Реализация входа в систему без пароля
Идем дальше и создаем файл email_auth_example.php со следующим содержимым.
// Require composer autoloader
require __DIR__ . '/vendor/autoload.php';
require __DIR__ . '/dotenv-loader.php';
use Auth0\SDK\Auth0;
$domain = getenv('AUTH0_DOMAIN');
$client_id = getenv('AUTH0_CLIENT_ID');
$client_secret = getenv('AUTH0_CLIENT_SECRET');
$redirect_uri = getenv('AUTH0_CALLBACK_URL');
$audience = getenv('AUTH0_AUDIENCE');
if($audience == '')
$audience = 'https://' . $domain . '/userinfo';
$auth0 = new Auth0([
'domain' => $domain,
'client_id' => $client_id,
'client_secret' => $client_secret,
'redirect_uri' => $redirect_uri,
'audience' => $audience,
'scope' => 'openid profile',
'persist_id_token' => true,
'persist_access_token' => true,
'persist_refresh_token' => true,
$userInfo = $auth0->getUser();
src="https://code.jquery.com/jquery-3.1.0.min.js" type="text/javascript">
name="viewport" content="width=device-width, initial-scale=1">
href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet">
href="//maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css" rel="stylesheet">
href="public/app.css" rel="stylesheet">
class="home">
class="container">
class="login-page clearfix">
if(!$userInfo): ?>
src="https://cdn.auth0.com/js/lock/11.6.1/lock.min.js">
type="text/javascript">
function login()
var lock = new Auth0LockPasswordless(' echo $client_id; ?>', ' echo $domain; ?>',
allowedConnections: ['email'], // Should match the Email connection name, it defaults to 'email'
passwordlessMethod: 'code', // If not specified, defaults to 'code'
auth:
redirectUrl: ' echo $redirect_uri; ?>',
responseType: 'code'
lock.show();
href="javascript:login()">Passwordless Login Using Email
else: ?>
class="logged-in-box auth0-box logged-in">
id="logo"> src="//cdn.auth0.com/samples/auth0_logo_final_blue_RGB.png" />
class="avatar" src=" echo $userInfo['picture'] ?>"/>
Welcome class="nickname"> echo $userInfo['nickname'] ?>
class="btn btn-warning btn-logout" href="/logout.php">Logout
endif ?>
В начале мы включили автозагрузчики, которые отвечают за загрузку Auth0 классов и классов, связанных с переменной среды.
После этого мы инициализируем конфигурационные переменные из файла .env, используя функцию getenv .
Затем мы вызываем метод getUser объекта Auth0, чтобы проверить, есть ли активная сессия. Исходя из этого, мы показываем ссылку SignIn , если нет активной сессии. В противном случае отображается имя пользователя, вошедшего в систему, и ссылка Logout .
А теперь запустите файл email_auth_example.php, чтобы протестировать ваше приложение!
Вход в систему без пароля с использованием SMS
Чтобы включить вход в систему без пароля с помощью SMS, перейдите в раздел Connections > Passwordless на панели управления Auth0 и включите параметр SMS. По умолчанию Auth0 использует сервис Twilio для отправки сообщений. Поэтому вам стоит создать себе аккаунт Twilio.
На панели инструментов Twilio получите свои ACCOUNT SID и AUTH TOKEN и введите эти значения в поля Twilio SID и Twilio AuthToken в разделе Connections > Passwordless > SMS > Settings на панели управления Auth0.
Кроме того, вам необходимо создать новый сервис обмена сообщениями в SMS > Messaging Services на панели инструментов Twilio. После успешного создания сервиса вы получите идентификатор Service ID, и именно его вам нужно будет ввести в поле Copilot SID в Connections > Passwordless > SMS > Settings.
Наконец, давайте посмотрим, как работает авторизация без пароля с помощью SMS. Создайте файл sms_auth_example.php. Содержимое такое же, как email_auth_example.php, за исключением функции login() , которая выглядит следующим образом.
function login()
var lock = new Auth0LockPasswordless(' echo $client_id; ?>', ' echo $domain; ?>',
allowedConnections: ['sms'], // Should match the SMS connection name
auth:
redirectUrl: ' echo $redirect_uri; ?>',
responseType: 'code'