gpt4 book ai didi

dart - 如何为 Aqueduct 服务器上的用户注销(即撤销、删除或使 token 无效)?

转载 作者:行者123 更新时间:2023-12-03 02:45:53 25 4
gpt4 key购买 nike

我知道如何实现注册用户的路由,以及如何用用户凭据换取访问 token 。这些都包含在官方 tutorial 中.

如何使注册用户的访问 token (和刷新 token )无效。如果用户的帐户遭到破坏,这对于注销和限制损害都是必要的。

我看到有一个方法

authServer.revokeAllGrantsForResourceOwner(identifier)

但我仍在研究如何从用户那里获取标识符,因为客户端应用程序知道用户名,但不知道服务器数据库中的用户 ID。最好只传递当前 token 并让服务器取消该用户的所有 token 。

最佳答案

如果您想撤销给定 token 的所有 token ,请从授权 token 中获取用户 ID 并对该用户的 token 运行删除查询:

class TokenManagerController extends ResourceController {
@Operation.delete()
Future<Response> deleteTokens() async {
final userId = request.authorization.ownerID;

final query = Query<ManagedAuthToken>(context)
..where((token) => token.resourceOwner).identifiedBy(userId);
final count = await query.delete();

return Response.ok({"userId": userId, "tokensDeleted": count});
}
}

并确保链接授权人:

router.route("/tokens")
.link(() => Authorizer.bearer(authServer))
.link(() => TokenManagerController(context));

FWIW,我建议专门为此操作设置一个范围,该范围仅通过额外登录授予此场景。 UX 是用户必须再次输入密码。

如果您只想删除一个 token ,只需运行删除查询,其中 access_token = 授权 header 中的 token 。

class LogoutController extends ResourceController {
@Operation.delete()
Future<Response> deleteTokens(@Bind.header('authorization') String authHeader) async {

final parser = AuthorizationBearerParser();
final userToken = parser.parse(authHeader);

final query = Query<ManagedAuthToken>(context)
..where((token) => token.accessToken).equalTo(userToken);
final count = await query.delete();

final userId = request.authorization.ownerID;
return Response.ok({"userId": userId, "tokensDeleted": count});
}
}

关于dart - 如何为 Aqueduct 服务器上的用户注销(即撤销、删除或使 token 无效)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56247509/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com