mcpField
S
serverpod-auth

serverpod-auth

github.com/serverpod安全3.3k43 次安装1 天前更新
代码仓库

关于 serverpod-auth

Serverpod Authentication 是 Serverpod 项目的身份验证功能,面向 Serverpod 服务端与 Flutter 应用开发者。它提供登录状态、用户资料和访问范围控制。

主要功能

  1. 01要求登录或指定权限范围
  2. 02获取已认证用户 ID 和资料
  3. 03通过 SignInWidget 登录
  4. 04监听认证状态变化
  5. 05退出单台或所有设备

适用场景

  1. 01限制端点仅供登录用户访问
  2. 02按权限范围保护服务端方法
  3. 03在 Flutter 应用提供登录界面
  4. 04读取用户资料或结束会话

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/serverpod/serverpod --skill serverpod-auth

安装后在 Claude Code 中输入/serverpod-auth确认已加载。

附带文件references/setup.mdreferences/user-management.md

详细介绍

Serverpod 身份验证

Serverpod 内置身份验证。使用 serverpod create 创建的项目默认启用身份验证(除非指定 --no-auth,或项目没有数据库),并已预先配置电子邮件,且已在 lib/server.dart 和 Flutter 应用中完成接线。

在服务器应用代码中,导入 package:serverpod_auth_idp_server/core.dart 和 package:serverpod_auth_idp_server/providers/<provider>.dart。请勿导入 package:serverpod_auth_idp_server/serverpod_auth_idp_server.dart——该库供代码生成器使用。

服务器端

要求用户登录或拥有特定作用域
class MyEndpoint extends Endpoint {
  // Require the user to be signed in to access methods in this endpoint.
  @override
  bool get requireLogin => true;

  // Require the user to have the admin scope.
  @override
  Set<Scope> get requiredScopes => {Scope.admin};

  // This method can only be accessed if the user is admin.
  Future<void> myMethod(Session session) async {
    ...
  }
  ...
}
用户 ID 和信息
import 'package:serverpod_auth_idp_server/core.dart';

// Get authenticated user's ID.
final userIdUuidValue = session.authenticated?.authUserId;

// Get the user profile (full name, email, etc)
var userProfile = await session.authenticated?.userProfile(session);

// Find a user profile by email.
final profiles = await AuthServices.instance.userProfiles.admin
    .listUserProfiles(
      session,
      email: email.toLowerCase(),
      limit: 1,
    );
final userProfile = profiles.firstOrNull;

// Get authentication info for user id (for editing scopes, etc).
final authUsers = AuthServices.instance.authUsers;
final authUser = await authUsers.get(
  session,
  authUserId: userProfile.authUserId,
);

Flutter 应用

使用 SignInWidget 让用户登录。它自带 Material 表面,因此与非 Material 设计系统混用时也能正确渲染:

SignInWidget(
  client: client,
  onAuthenticated: () => _showSnackBar(message: 'User authenticated.'),
  onError: (error) => _showSnackBar(message: 'Authentication failed: $error'),
)
  • 登录状态:client.auth.isAuthenticated。监听 client.auth.authInfoListenable(一个 ValueListenable<AuthSuccess?>,因此也可以使用 ValueListenableBuilder)以在状态变化时重建,并在 dispose 中移除监听器。
  • 退出登录:client.auth.signOutAllDevices() 或 client.auth.signOutDevice()。
  • 用户资料(电子邮件、全名等):await client.modules.serverpod_auth_core.userProfileInfo.get()。

更多信息

  • references/setup.md — 为未启用身份验证创建的项目添加身份验证包,在 server.dart 中初始化服务,接入 Flutter 客户端,配置社交账号登录,以及从旧版 serverpod_auth 模块迁移。
  • references/user-management.md — 为用户关联自己的数据、编辑作用域,以及允许客户端编辑个人资料。

评论

支持 Markdown