关于 serverpod-auth
Serverpod Authentication 是 Serverpod 项目的身份验证功能,面向 Serverpod 服务端与 Flutter 应用开发者。它提供登录状态、用户资料和访问范围控制。
主要功能
- 01要求登录或指定权限范围
- 02获取已认证用户 ID 和资料
- 03通过 SignInWidget 登录
- 04监听认证状态变化
- 05退出单台或所有设备
适用场景
- 01限制端点仅供登录用户访问
- 02按权限范围保护服务端方法
- 03在 Flutter 应用提供登录界面
- 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