diff --git a/examples/nextjs-spa/src/pages/login.tsx b/examples/nextjs-spa/src/pages/login.tsx
index 9e0adc5a5..4b3fa7c26 100644
--- a/examples/nextjs-spa/src/pages/login.tsx
+++ b/examples/nextjs-spa/src/pages/login.tsx
@@ -26,6 +26,10 @@ const Login: NextPageWithLayout = () => {
const returnTo = String(router.query.return_to || "")
const flowId = String(router.query.flow || "")
+ // login_challenge is used for OAuth2 and OpenID Connect logins
+ // when this NextJS application is used as an OAuth provider for Single Sign on (SSO).
+ const loginChallenge = String(router.query.login_challenge || "")
+
// Refresh means we want to refresh the session. This is needed, for example, when we want to update the password
// of a user.
const refresh = Boolean(router.query.refresh)
@@ -53,13 +57,14 @@ const Login: NextPageWithLayout = () => {
)
const createFlow = useCallback(
- (refresh: boolean, aal: string, returnTo: string) =>
+ (refresh: boolean, aal: string, returnTo: string, loginChallenge?: string) =>
ory
.createBrowserLoginFlow({
refresh: refresh,
// Check for two-factor authentication
aal: aal,
returnTo: returnTo,
+ loginChallenge: loginChallenge,
})
.then(({ data }) => {
setFlow(data)
@@ -76,13 +81,13 @@ const Login: NextPageWithLayout = () => {
if (flowId) {
getFlow(flowId).catch(() => {
- createFlow(refresh, aal, returnTo)
+ createFlow(refresh, aal, returnTo, loginChallenge)
})
return
}
// Otherwise we initialize it
- createFlow(refresh, aal, returnTo)
+ createFlow(refresh, aal, returnTo, loginChallenge)
}, [router.isReady])
const submitFlow = (values: UpdateLoginFlowBody) =>
@@ -119,6 +124,13 @@ const Login: NextPageWithLayout = () => {
includeScripts={true}
// we submit the form data to Ory
onSubmit={({ body }) => submitFlow(body as UpdateLoginFlowBody)}
+
+ // OAauth2 and OpenID Connect
+ {...(flow.oauth2_login_request && {
+ subtitle: `To authenticate ${flow.oauth2_login_request.client?.client_name ||
+ flow.oauth2_login_request.client?.client_id
+ }`
+ })}
/>
) : (
Loading...
diff --git a/package-lock.json b/package-lock.json
index b4d8164ba..23e080b46 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -5579,6 +5579,66 @@
"version": "13.4.13",
"license": "MIT"
},
+ "node_modules/@next/swc-darwin-arm64": {
+ "version": "13.4.13",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.4.13.tgz",
+ "integrity": "sha512-ZptVhHjzUuivnXMNCJ6lER33HN7lC+rZ01z+PM10Ows21NHFYMvGhi5iXkGtBDk6VmtzsbqnAjnx4Oz5um0FjA==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-darwin-x64": {
+ "version": "13.4.13",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.4.13.tgz",
+ "integrity": "sha512-t9nTiWCLApw8W4G1kqJyYP7y6/7lyal3PftmRturIxAIBlZss9wrtVN8nci50StDHmIlIDxfguYIEGVr9DbFTg==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-linux-arm64-gnu": {
+ "version": "13.4.13",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.4.13.tgz",
+ "integrity": "sha512-xEHUqC8eqR5DHe8SOmMnDU1K3ggrJ28uIKltrQAwqFSSSmzjnN/XMocZkcVhuncuxYrpbri0iMQstRyRVdQVWg==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-linux-arm64-musl": {
+ "version": "13.4.13",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.4.13.tgz",
+ "integrity": "sha512-sNf3MnLAm8rquSSAoeD9nVcdaDeRYOeey4stOWOyWIgbBDtP+C93amSgH/LPTDoUV7gNiU6f+ghepTjTjRgIUQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
"node_modules/@next/swc-linux-x64-gnu": {
"version": "13.4.13",
"cpu": [
@@ -5607,6 +5667,51 @@
"node": ">= 10"
}
},
+ "node_modules/@next/swc-win32-arm64-msvc": {
+ "version": "13.4.13",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.4.13.tgz",
+ "integrity": "sha512-rWurdOR20uxjfqd1X9vDAgv0Jb26KjyL8akF9CBeFqX8rVaBAnW/Wf6A2gYEwyYY4Bai3T7p1kro6DFrsvBAAw==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-win32-ia32-msvc": {
+ "version": "13.4.13",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.4.13.tgz",
+ "integrity": "sha512-E8bSPwRuY5ibJ3CzLQmJEt8qaWrPYuUTwnrwygPUEWoLzD5YRx9SD37oXRdU81TgGwDzCxpl7z5Nqlfk50xAog==",
+ "cpu": [
+ "ia32"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-win32-x64-msvc": {
+ "version": "13.4.13",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.4.13.tgz",
+ "integrity": "sha512-4KlyC6jWRubPnppgfYsNTPeWfGCxtWLh5vaOAW/kdzAk9widqho8Qb5S4K2vHmal1tsURi7Onk2MMCV1phvyqA==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
"node_modules/@nicolo-ribaudo/eslint-scope-5-internals": {
"version": "5.1.1-v1",
"dev": true,