如何在Aqueduct服务器上为用户注销(即撤销,删除或使令牌无效)?

时间:2019-05-21 23:28:53

标签: dart aqueduct dart-server

我知道如何实现注册用户的路由,以及如何用用户凭据交换访问令牌。两者都包含在官方tutorial中。

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

我看到有一种方法

authServer.revokeAllGrantsForResourceOwner(identifier)

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

1 个答案:

答案 0 :(得分:1)

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

(uint64_t)(a * b * d)

并确保您链接授权者:

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});
  }
}

FWIW,我建议为此操作专门设置一个作用域,该作用域仅通过附加登录为此情况授予。 UX是用户必须再次输入密码。

如果您只想删除一个令牌,只需运行一个删除查询,其中router.route("/tokens") .link(() => Authorizer.bearer(authServer)) .link(() => TokenManagerController(context)); =授权标头中的令牌。

access_token