如何在 Angular 中添加“通过 Posty5 继续”按钮

使用 @Posty5/oauth-angular 为 Angular 应用添加“使用 Posty5 登录”:选择模式、放置按钮、处理回调,并通过 CSS 变量调整样式。

AD广告
如何在 Angular 中添加“通过 Posty5 继续”按钮

登录按钮是新用户最先接触的元素,因此它必须契合您的设计、支持键盘操作、在阿拉伯语中正确显示,并且在服务器端渲染时不闪烁。@posty5/oauth-angular 为 Angular 应用提供了一个满足以上所有要求的现成“通过 Posty5 继续”按钮,以及其背后的完整登录流程。

本教程将带您从安装一直做到一个可用且已设置样式的按钮。前提是您已按照为您的网站或应用添加“使用 Posty5 登录”中的说明注册了 OAuth 应用;本文也是API 密钥与 SDK 指南所介绍的开发者平台的一部分。

首先选择模式

  • startUrl——您的后端已经在运行登录流程,例如使用 @posty5/oauth。按钮只负责打开您的起始地址。这是推荐的模式,Trend Digest 使用的也是这种模式。
  • codeHandler——软件包在浏览器中启动 PKCE,并将授权码发送到您的后端,由后端使用客户端密钥完成交换。
  • browser——无需后端。软件包以公共客户端身份交换授权码,并使用 WebCrypto 验证 ID 令牌。OAuth 应用必须允许来自您网站源的浏览器登录。

无论哪种模式,客户端密钥都绝不会到达浏览器。

逐步添加按钮

  1. 使用 npm install @posty5/oauth-angular 安装软件包。它支持 Angular 17.3 到 20。
  2. 在应用配置中调用 providePosty5Auth,并传入您选择的模式。
  3. 在使用按钮的地方导入 Posty5SignInButtonComponent,并将 posty5SignInButton 属性加在真正的 button 元素上,这样表单、焦点和键盘都能照常工作。
  4. 对于 codeHandler 和 browser 模式,将重定向 URI 路由到一个懒加载页面,在该页面中放置 posty5Callback 组件,并在其 signedIn 和 failed 事件触发时进行导航。
  5. 自己先登录一次,确认登录后会回到您开始时所在的页面。
// app.config.ts
import { providePosty5Auth } from "@posty5/oauth-angular";

export const appConfig = {
  providers: [
    providePosty5Auth({
      mode: "startUrl",
      startUrl: "/api/auth/posty5/start",
    }),
  ],
};

<button posty5SignInButton theme="outline" shape="pill" [width]="320" returnUrl="/dashboard"></button>

获取软件包并注册您的应用

在 Posty5 Studio 中注册 OAuth 应用,然后安装 @posty5/oauth-angular,并将按钮放到您的登录页面上。

让按钮契合您的设计

  • theme——filled(Posty5 蓝色)、outline(白色),或用于深色页面的 filledDark。
  • size——large、medium 或 small;shape——rectangular、pill、circle 或 square(仅显示徽标)。
  • text——“通过 Posty5 继续”“使用 Posty5 登录”“使用 Posty5 注册”或“登录”;label 可完全替换按钮文字。
  • 每个按钮可单独设置 logoAlignment、width 和 locale;如果想完全自己设计样式,可使用 unstyled。
.login-card .posty5-btn {
  --posty5-btn-radius: 9999px;
  --posty5-btn-font-family: "Cairo", sans-serif;
  --posty5-btn-hover-bg: #1a6bff;
}

内置样式的优先级(specificity)为零,因此您的任何规则都能生效,无需 !important;所有颜色和尺寸都是 CSS 自定义属性。阿拉伯语按钮会自动采用从右到左的布局,而 Posty5 始终以拉丁字母书写。

按姓名问候回访用户

登录之后,按钮可以显示用户的头像、带有用户姓名的“以某某身份继续”字样以及部分隐藏的电子邮箱,就像其他登录服务提供商的个性化按钮一样。在 browser 模式下,这一切会自动完成;在其他模式下,请使用后端返回的数据调用 rememberUser,并在退出登录时调用 forgetUser。

被记住的用户信息只包含姓名、一个 HTTPS 头像地址和部分隐藏的电子邮箱,不包含任何令牌。个性化按钮只会在激活(hydration)之后出现,因此服务器渲染的 HTML 永远不会出现不一致。

注意事项

  • 该软件包可安全用于服务器端渲染:在服务器上,按钮显示通用文字,登录流程绝不会在服务器上运行。
  • 它通过 fetch 调用 Posty5,因此您的 HTTP 拦截器绝不会把您自己的 Authorization 请求头添加到 Posty5 的端点上。
  • 进行中的登录保存在单个标签页的会话存储(session storage)中,并在 10 分钟后过期。
  • 在 browser 模式下,请将令牌保存在内存中。对于长时间会话,建议使用 startUrl 或 codeHandler,并配合 HttpOnly Cookie。

常见问题

支持哪些 Angular 版本?

Angular 17.3 到 20。该软件包使用独立(standalone)API、signals 和 OnPush。

我需要后端吗?

使用 browser 模式时不需要,但 OAuth 应用必须允许浏览器登录并列出您网站的源。如果有后端,startUrl 或 codeHandler 会把密钥和会话保留在您的服务器上。

可以更改按钮上的文字吗?

可以。通过 text 从四种内置文字中选择一种,通过 label 替换它,或者在 labels 配置中按语言添加您自己的文字。

它支持服务器端渲染吗?

支持。所有浏览器 API 都有保护措施,服务器只渲染通用按钮,个性化按钮和回调仅在浏览器中启动。

用户在 Posty5 上选择“取消”会怎样?

回调会以 cancelled 代码失败,因此您可以将用户送回您的登录页面。

AD广告