BLOG / 教程

在 Memos 中接入 Casdoor 登录并获取用户信息

通过自定义 OAuth 配置让 Memos 接入 Casdoor 登录,实现用户名、昵称、邮箱和头像的完整同步。

约 5 分钟0次浏览
  • #教程
  • #Memos
  • #Casdoor

如果你在自建 Memos 的过程中想要接入统一认证,Casdoor 是一个不错的选择。它支持标准 OAuth 2.0 / OIDC 流程,而 Memos 刚好提供了自定义 OAuth 的配置入口,两者对接起来并不复杂。这篇文章记录一下具体的配置过程,特别是几个容易踩坑的字段映射。

前提条件

  • Casdoor 实例已部署并可访问,假设地址为 https://casdoor.example.com
  • Memos 实例已部署并可访问,假设地址为 https://memos.example.com
  • 已在 Casdoor 中创建了 Application,并拿到了:
    • Client ID
    • Client Secret

Casdoor Application 配置

登录 Casdoor → 进入 Applications → New Application(或编辑已有的)。

需要关注的几个地方:

  1. Redirect URI 填 Memos 的回调地址:
    text
    https://memos.example.com/auth/callback
  2. Scope 填:
    text
    openid profile email
    这三个 scope 能让 Casdoor 返回用户名、邮箱、显示名和头像信息。
  3. 记下 Client IDClient Secret,后面在 Memos 里要用。

Memos 自定义 OAuth 配置

进入 Memos → 设置 → 自定义 OAuth,按下表填写:

Memos 字段填写内容
模板 (Template)Custom
名称 (Name)Casdoor Auth
客户端 ID (Client ID)<你的 Casdoor Client ID>
客户端密钥 (Client Secret)<你的 Casdoor Client Secret>
重定向链接 (Redirect URI)https://memos.example.com/auth/callback
授权端点 (Authorization Endpoint)https://casdoor.example.com/login/oauth/authorize
令牌端点 (Token Endpoint)https://casdoor.example.com/api/login/oauth/access_token
用户端点 (User Endpoint)https://casdoor.example.com/api/userinfo
范围 (Scope)openid profile email
标识符 (Identifier)preferred_username
显示名称name
邮箱email
头像 URL (Avatar URL)picture

几个需要注意的点:

  • Avatar URL 必须填 picture。Casdoor 的 /api/userinfo 接口返回的头像字段叫 picture(遵循 OIDC 标准),填错了头像就显示不出来。
  • 标识符用 preferred_username。Casdoor 的 UserInfo 接口遵循 OIDC 标准,用户名字段返回为 preferred_username(对应 Casdoor 内部的 Name),Memos 用它来唯一标识用户。
  • 显示名称用 name。OIDC 标准中 name 对应的是用户的显示名称(即 Casdoor 内部的 DisplayName),登录后 Memos 界面上显示的昵称就取这个值。

测试登录

配置保存之后走一遍完整流程验证:

  1. 打开 Memos 登录页面,应该能看到一个 Casdoor Auth 的登录按钮。
  2. 点击后跳转到 Casdoor 的登录页面。
  3. 在 Casdoor 完成登录(账号密码、或者其他已配置的登录方式)。
  4. 登录成功后自动跳回 Memos,检查用户信息是否正确同步:
    • 用户名 → 取自 preferred_username
    • 昵称 → 取自 name
    • 邮箱 → 取自 email
    • 头像 → 取自 picture

如果头像没有显示,先确认 Casdoor 里对应用户确实设置了头像,再检查 Avatar URL 字段是不是填成了别的值。

小结

整个对接过程不算复杂,主要就是 Casdoor 端的 Redirect URI 和 Scope 别漏填,Memos 端的字段映射别搞混。因为 Casdoor 的 /api/userinfo 接口返回的是 OIDC 标准字段,和 Casdoor 后台看到的内部字段名不一样,最容易踩的坑就是把标识符填成 name(OIDC 里 name 其实是显示名称)、或者把头像填成 avatar 而非 picture

配好之后 Memos 就能通过 Casdoor 实现统一登录了,用户信息(用户名、昵称、邮箱、头像)也会在首次登录时自动同步过来。如果你的 Casdoor 还接了 GitHub、Google 之类的第三方登录,Memos 用户也可以间接享受到这些登录方式。

KEEP READING

继续阅读

DISCUSSION

文章评论

0
正在读取