---
description: >-
  允許 App 使用多種身份鑑別方式(authentication scheme), 預設為 Apex Express Auth. 但提供 Google
  Login 按鈕，使用者可切換用 Google 帳號登入。
---

# 登入時切換不同的身份鑑別方式

## User Story

在首頁提供 Google Login 的按鈕，

![](https://741116744-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5JWGStknepZGULjX5Vhv%2Fuploads%2FGjDOBjjkiIYKFuMJQLi1%2Fimage.png?alt=media\&token=ff1ae5d6-6e0d-482a-9c22-80fb5bcaed72)

或者在 Login page 提供

![](https://741116744-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5JWGStknepZGULjX5Vhv%2Fuploads%2FISAblrAlF6jS6BhsIERV%2Fimage.png?alt=media\&token=c97dc1d4-0bd8-4050-bb0c-38de285bd7eb)

## 原理

App 中有多種的身份鑑別方式。

登入時可切換到非預設的身份鑑別方式。

例如，App 的預設身份鑑別方式為 Apex Express Account. 但若按下 Google Login 按鈕時，要切換到 Google\_Auth 方式。

![](https://741116744-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5JWGStknepZGULjX5Vhv%2Fuploads%2FDTAB6zj6BTUJkYw6EZyd%2Fimage.png?alt=media\&token=64a256df-5f20-49d7-a64e-a1aad8506eaa)

切換到另一個 auth scheme 要具備四個條件:

* 尚未經過身份鑑別。一但使用某種身份鑑別機制，之要再切換到另一種，需要先登出之後再鑑別。
* 目的頁面為 private (Requiring Authentication)
* 該 auth scheme 允許 `Switch in Session`
* Redirect 到目的頁面時，使用  `APEX_AUTHENTICATION` 請求參數(request parameter)指定要使用的非預設鑑別方式。

## 前題(pre-requisitions)

App 完成 Google Login 的 Authentication Scheme 的設定。[請參考 Apex 應用程式的 Google Social Account Sign-in 設定](https://hychen39.github.io/oracle_apex/2023/05/23/apex_social_signin.html).

假設目前有兩個 Authentication Scheme: `Apex` (default) 及 `Google_Auth`:

![](https://741116744-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5JWGStknepZGULjX5Vhv%2Fuploads%2F71h7OdQhgt8TAbfylNdg%2Fimage.png?alt=media\&token=ef501619-e18f-4b98-93e6-59b7832c4fe5)

## 步驟

S1 建立一個空白 page (page 3)，確認其 Security > Authentication 屬性為 `Page Requires Authentication`.

S2 在 page 的 Before Header 執行點，新增一 Branch，轉跳到 App 的首頁(例如 page 1)

![](https://741116744-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5JWGStknepZGULjX5Vhv%2Fuploads%2FRt7HZzHhZkZqMXFtLnjm%2Fimage.png?alt=media\&token=8ad8bcf6-3630-4943-9686-59d45746e2e7)

S3 啟用 `Google_Auth scheme` 的 `Switch in Session` 屬性

瀏覽 App Home > Shared Components  > Authentication Schemes 編輯 `Google_Auth` scheme.

設定 Login Processing > Switch in Session 為 Enabled

![](https://741116744-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5JWGStknepZGULjX5Vhv%2Fuploads%2FoUkSmqDT7JEFiL9GrAV4%2Fimage.png?alt=media\&token=c2923a5c-ee0f-483f-b0fd-47f3a2e11734)

點擊 ? 有詳細的說明:

![](https://741116744-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5JWGStknepZGULjX5Vhv%2Fuploads%2FFQhUfXh0v4P7eu2ndXLe%2Fimage.png?alt=media\&token=cdcf061a-5f28-45ae-9cee-bc83e7f2076b)

S4 在 App Home page (page 1) 新增一個按鈕，提供 Google account login.

該按鈕按下後要轉跳先前建立的 page (page 3).

轉跳時要設定請求參數 `APEX_AUTHENTICATION=Google_Auth`.&#x20;

![](https://741116744-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5JWGStknepZGULjX5Vhv%2Fuploads%2F8c2ZgbGPLPtJokj6gTx6%2Fimage.png?alt=media\&token=4156bc34-1a49-4bc7-8403-9dd12903e2ea)

S5 測試.&#x20;

點擊 Google Login 按鈕後，會轉跳到 Page 3. 因為 Page 3 是 private, 所以會啟用身份鑑別。

請求參數 `APEX_AUTHENTICATION=Google_Auth` 指定使用 Google\_Auth 方案，所以會使用 Google Account 進行鑑別。

成功後，轉到 Page 3. Page 3 載入時會再轉跳到 Page 1.&#x20;

![](https://741116744-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5JWGStknepZGULjX5Vhv%2Fuploads%2FUAszsvensronOgHNs1dC%2Fimage.png?alt=media\&token=a1860f19-15da-48e7-8be6-0d12c4c809be)

![](https://741116744-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5JWGStknepZGULjX5Vhv%2Fuploads%2FvZ69AtOYyaL0zITszvE8%2Fimage.png?alt=media\&token=81f2cb1a-7f93-4e48-a32e-c2d3f14db29d)

![](https://741116744-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5JWGStknepZGULjX5Vhv%2Fuploads%2F7KCwgsGix1xMGVIzYLbH%2Fimage.png?alt=media\&token=10f5adf0-d677-4f1b-9570-002bae641ef1)

