パスワードでのIdentifier Firstログインを構築する
Before you start
以下が必要です。
ユニバーサルログインが構成されたAuth0開発テナント。
カスタムドメイン構成のアプリケーション。
ローカルホスト上で動作する開発用アプリまたはサンプルアプリ(Reactサンプルアプリなど)
Identifier First認証が有効になっている
パスワードを使用するデータベース接続
このガイドの終わりには、カスタマイズしたログインID画面とログインパスワード画面のあるIdentity Firstフローが完成します。詳細については、「使用の開始ガイド」をお読みの上で、SDKリファレンスガイド」を参照してください。
セットアップする
Auth0 Dashboardでユニバーサルログイン、Identifier First認証、パスワードを使用するデータベース接続をセットアップします。
シングルページアプリケーションを実行して、カスタムログイン画面を構築します。高度なカスタマイズインターフェイスのコンテキストを理解するには、Auth0が提供するボイラープレートアプリをクローンしてください:git clone https://github.com/auth0/auth0-acul-react-boilerplate
ACUL SDKをインストールします。Reactのボイラープレートをクローンしたら、ディレクトリをauth0-acul-react-boilerplate
に変更して、SDKをインストールします。
// open the directory where you git clone the boilerplate
cd auth0-acul-react-boilerplate && npm i
// Install the ACUL JS SDK
npm install @auth0/auth0-acul-js
Was this helpful?
1. login-id画面を構築する
![]() |
以下は完全な画面の例です。
ログインIDのサンプル画面
import { ChangeEvent } from "react";
import { LoginId as ScreenProvider } from "@auth0/auth0-acul-js";
// UI Components
import { Label } from "@/components/ui/label";
import { Input } from "@/components/ui/input";
import { Button } from "@/components/ui/button";
import { Text } from "@/components/ui/text";
import { Link } from "@/components/ui/link";
import {
CardHeader,
CardTitle,
CardDescription,
CardContent,
} from "@/components/ui/card";
export default function LoginId() {
// Initialize the SDK for this screen
const screenProvider = new ScreenProvider();
// Handle the submit action
const formSubmitHandler = (event: ChangeEvent<HTMLFormElement>) => {
event.preventDefault();
// grab the value from the form
const identifierInput = event.target.querySelector(
"input#identifier"
) as HTMLInputElement;
// Call the SDK
screenProvider.login({ username: identifierInput?.value });
};
// Render the form
return (
<form noValidate onSubmit={formSubmitHandler}>
<CardHeader>
<CardTitle className="mb-2 text-3xl font-medium text-center">
{screenProvider.screen.texts?.title ?? "Welcome"}
</CardTitle>
<CardDescription className="mb-8 text-center">
{screenProvider.screen.texts?.description ?? "Login to continue"}
</CardDescription>
</CardHeader>
<CardContent>
<div className="mb-2 space-y-2">
<Label htmlFor="identifier">
{screenProvider.screen.texts?.emailPlaceholder ??
"Enter your email"}
</Label>
<Input
type="text"
id="identifier"
name="identifier"
defaultValue={
screenProvider.screen.data?.username ??
screenProvider.untrustedData.submittedFormData?.username
}
/>
</div>
<Button type="submit" className="w-full">
{screenProvider.screen.texts?.buttonText ?? "Continue"}
</Button>
<Text className="mb-2">
{screenProvider.screen.texts?.footerText ??
"Don't have an account yet?"}
<Link className="ml-1" href={screenProvider.screen.signupLink ?? "#"}>
{screenProvider.screen.texts?.footerLinkText ??
"Create your account"}
</Link>
</Text>
<Text>
Need Help?
<Link
className="ml-1"
href={screenProvider.screen.resetPasswordLink ?? "#"}
>
{screenProvider.screen.texts?.forgottenPasswordText ??
"Forgot your Password?"}
</Link>
</Text>
</CardContent>
</form>
);
}
Was this helpful?
SDKをインポートして初期化する
auth0-acul-react-boilerplate/src
フォルダー内に「screens
」という名前のフォルダーと「Login.tsx
」という名前のファイルを作成します。SDKをインポートして、Reactコンポーネント内で画面にSDKを初期化します。
import { LoginId as ScreenProvider } from "@auth0/auth0-acul-js";
export default function LoginId() {
// Initialize the SDK for this screen
const screenProvider = new ScreenProvider();
...
}
Was this helpful?
SDKで画面のプロパティやメソッドにアクセスする
SDKを使用すると、画面のプロパティやメソッドにアクセスできます。Auth0 ACUL JS SDKにはデータにアクセスするためのプロパティとメソッドがあります。
コンテキストデータの詳細については、「ユニバーサルログインのコンテキストデータ」をお読みください。
<CardContent>
<div className="mb-2 space-y-2">
<Label htmlFor="identifier">
{screenProvider.screen.texts?.emailPlaceholder ??
"Enter your email"}
</Label>
<Input
type="text"
id="identifier"
name="identifier"
defaultValue={
screenProvider.screen.data?.username ??
screenProvider.untrustedData.submittedFormData?.username
}
/>
</div>
<Button type="submit" className="w-full">
{screenProvider.screen.texts?.buttonText ?? "Continue"}
</Button>
...
</CardContent>
</form>
Was this helpful?
送信アクションを呼び出す
SDKを使用して、画面で捉えたデータをサーバーに送信します。サーバーはこのデータを処理し、フローにある次の手順にユーザーを進めます。エラーがあれば画面を再度読み込んで、ユーザーにエラーのある箇所を示します。エラーはSDKからアクセスされます。
const formSubmitHandler = (event: ChangeEvent<HTMLFormElement>) => {
event.preventDefault();
// grab the value from the form
const identifierInput = event.target.querySelector(
"input#identifier"
) as HTMLInputElement;
// Call the SDK
screenProvider.loginid({ username: identifierInput?.value });
};
Was this helpful?
2. login-password画面を構築する
![]() |
以下は完全な画面の例です。
import { ChangeEvent } from "react";
import { LoginPassword as ScreenProvider } from "@auth0/auth0-acul-js";
// UI Components
import { Label } from "@/components/ui/label";
import { Input } from "@/components/ui/input";
import { Button } from "@/components/ui/button";
import { Text } from "@/components/ui/text";
import { Link } from "@/components/ui/link";
import {
CardHeader,
CardTitle,
CardDescription,
CardContent,
} from "@/components/ui/card";
export default function LoginPassword() {
// Initialize the SDK for this screen
const screenProvider = new ScreenProvider();
// Handle the submit action
const formSubmitHandler = (event: ChangeEvent<HTMLFormElement>) => {
event.preventDefault();
// grab the values from the form
const identifierInput = event.target.querySelector(
"input#identifier"
) as HTMLInputElement;
const passwordInput = event.target.querySelector(
"input#password"
) as HTMLInputElement;
// Call the SDK
screenProvider.login({
username: identifierInput?.value,
password: passwordInput?.value,
});
};
// Render the form
return (
<form noValidate onSubmit={formSubmitHandler}>
<CardHeader>
<CardTitle className="mb-2 text-3xl font-medium text-center">
{screenProvider.screen.texts?.title ?? "Enter Your Password"}
</CardTitle>
<CardDescription className="mb-8 text-center">
{screenProvider.screen.texts?.description ??
"Enter your password to continue"}
</CardDescription>
</CardHeader>
<CardContent>
<Text className="mb-4 text-large">
<span className="inline-block">
Log in as
<span className="inline-block ml-1 font-bold">
{screenProvider.screen.data?.username}.
</span>
</span>
<Link
href={screenProvider.screen.editIdentifierLink ?? "#"}
className="ml-2"
>
{screenProvider.screen.texts?.editEmailText ?? "Edit Email"}
</Link>
</Text>
<Input
type="hidden"
name="identifier"
id="identifier"
value={screenProvider.screen.data?.username}
/>
<div className="mb-2 space-y-2">
<Label htmlFor="password">
{screenProvider.screen.texts?.passwordPlaceholder ?? "Password"}
</Label>
<Input type="password" id="password" name="password" />
</div>
<Button type="submit" className="w-full">
{screenProvider.screen.texts?.buttonText ?? "Continue"}
</Button>
<Text>
Need Help?
<Link
href={screenProvider.screen.resetPasswordLink ?? "#"}
className="ml-1"
>
{screenProvider.screen.texts?.forgottenPasswordText ??
"Forgot your Password?"}
</Link>
</Text>
</CardContent>
</form>
);
}
Was this helpful?
SDKをインポートして初期化する
auth0-acul-react-boilerplate/src
フォルダー内に「screens
」という名前のフォルダーと「Login.tsx
」という名前のファイルを作成します。SDKをインポートして、Reactコンポーネント内で画面にSDKを初期化します。
import { LoginPassword as ScreenProvider } from "@auth0/auth0-acul-js";
export default function LoginPassword() {
// Initialize the SDK
const [SDK] = useState(() => new ScreenProvider());\
...
}
Was this helpful?
SDKで画面のプロパティやメソッドにアクセスする
SDKを使用すると、画面のプロパティやメソッドにアクセスできます。Auth0 ACUL JS SDKにはデータにアクセスするためのプロパティとメソッドがあります。
コンテキストデータの詳細については、「ユニバーサルログインのコンテキストデータ」をお読みください。
<CardContent>
<Text className="mb-4 text-large">
<span className="inline-block">
Log in as
<span className="inline-block ml-1 font-bold">
{screenProvider.screen.data?.username}.
</span>
</span>
<Link
href={screenProvider.screen.editIdentifierLink ?? "#"}
className="ml-2"
>
{screenProvider.screen.texts?.editEmailText ?? "Edit Email"}
</Link>
</Text>
<Input
type="hidden"
name="identifier"
id="identifier"
value={screenProvider.screen.data?.username}
/>
<div className="mb-2 space-y-2">
<Label htmlFor="password">
{screenProvider.screen.texts?.passwordPlaceholder ?? "Password"}
</Label>
<Input type="password" id="password" name="password" />
</div>
<Button type="submit" className="w-full">
{screenProvider.screen.texts?.buttonText ?? "Continue"}
</Button>
...
</CardContent>
</form>
Was this helpful?
送信アクションを呼び出す
SDKを使用して、画面で捉えたデータをサーバーに送信します。サーバーはこのデータを処理し、フローにある次の手順にユーザーを進めます。エラーがあれば画面を再度読み込んで、ユーザーにエラーのある箇所を示します。エラーはSDKからアクセスされます。
const formSubmitHandler = (event: ChangeEvent<HTMLFormElement>) => {
event.preventDefault();
// grab the values from the form
const identifierInput = event.target.querySelector(
"input#identifier"
) as HTMLInputElement;
const passwordInput = event.target.querySelector(
"input#password"
) as HTMLInputElement;
// Call the SDK
screenProvider.login({
username: identifierInput?.value,
password: passwordInput?.value,
});
};
Was this helpful?
3. ACULにローカルアセットの使用を構成する
Auth0 CLI、Terraform、またはManagement APIを使用してACULを有効化します。構成可能な項目については、「ACUL画面を構成する」をお読みください。
プロジェクトのルートディレクトリにsettings
フォルダーを作成して、{SCREENNAME}.json
ファイルを格納します。
//settings.json
{
"rendering_mode": "advanced",
"context_configuration": [
"screen.texts"
],
"default_head_tags_disabled": false,
"head_tags": [
{
"attributes": {
"async": true,
"defer": true,
"integrity": [
"ASSET_SHA"
],
"src": "http://127.0.0.1:8080/index.js"
},
"tag": "script"
},
{
"attributes": {
"href": "http://127.0.0.1:8080/index.css",
"rel": "stylesheet"
},
"tag": "link"
}
]
}
Was this helpful?
auth0 ul customize --rendering-mode advanced --prompt {SCREENNAME} --screen {SCREENNAME} --settings-file ./settings/{SCREENNAME}.json
Was this helpful?
プロジェクトのルートディレクトリ内にlogin-id.json
ファイルを作成します:
//login-id.json
{
"rendering_mode": "advanced",
"context_configuration": [
"screen.texts"
],
"default_head_tags_disabled": false,
"head_tags": [
{
"attributes": {
"async": true,
"defer": true,
"integrity": [
"ASSET_SHA"
],
"src": "http://127.0.0.1:8080/index.js"
},
"tag": "script"
},
{
"attributes": {
"href": "http://127.0.0.1:8080/index.css",
"rel": "stylesheet"
},
"tag": "link"
}
]
}
Was this helpful?
Auth0 TerraformでACULを有効にする
prompts:
identifier_first: true
universal_login_experience: classic
mfa-login-options:
pageTitle: 'Log in to ${clientName}'
authenticatorNamesSMS: 'SMS'
screenRenderers:
- login-id:
login-id: ./prompts/screenRenderSettings/login-id.json
Was this helpful?
Auth0 Management APIを使用してACULを有効化できます
curl --location --request PATCH 'https://{YOUR-CUSTOM-DOMAIN}/api/v2/prompts/{YOUR-PROMPT}/screen/{YOUR-SCREEN}/rendering' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <API TOKEN>' \
--data '{
"rendering_mode": "advanced",
"context_configuration": [
"branding.settings",
"organization.branding",
"screen.texts",
"tenant.name",
"tenant.friendly_name",
"tenant.enabled_locales",
"untrusted_data.submitted_form_data",
"untrusted_data.authorization_params.ui_locales",
"untrusted_data.authorization_params.login_hint",
"untrusted_data.authorization_params.screen_hint"
],
"default_head_tags_disabled": false,
"head_tags": [
{
"tag": "script",
"attributes": {
"src": "http://127.0.0.1:8080/index.js",
"defer": true
}
},
{
"tag": "link",
"attributes": {
"rel": "stylesheet",
"href": "http://127.0.0.1:8080/index.css"
}
},
{
"tag": "meta",
"attributes": {
"name": "viewport",
"content": "width=device-width, initial-scale=1"
}
}
]
}'
Was this helpful?
ローカルサーバーで構成をテストする
ACULではアセットを公開URLでホストする必要があります。アセットをデプロイする前に、ローカルサーバーを実行してアセットをテストしてください。
npm run build
cd dist
npx serve -p 8080 // serve the assets on your local machine
Was this helpful?
4. アセットをデプロイしてテナント構成を更新する
ユニバーサルログインの高度なカスタマイズは、ViteやWebpackなどを含むすべてのModern Javascriptバンドルで動作します。詳細については、「高度なカスタマイズを運用にデプロイする」をお読みください。
テナントにACULをデプロイする詳細については、「ACUL画面を構成する」をお読みください。
関連コンテンツ
トピック | 説明 |
---|---|
ユニバーサルログインの高度なカスタマイズ | 高度なカスタマイズの仕組みを説明します。 |
高度なカスタマイズの使用を開始する | 高度なカスタマイズの入門ガイドです。 |
ユニバーサルログインの高度なカスタマイズ:画面 | 高度なカスタマイズに利用可能な画面のリストです。 |