使用 AuthController 传递用户 ID
Passing user id with AuthController
我刚刚使用 aqueduct 作为后端制作了简单的身份验证应用程序。我使用渡槽文档页面中的代码进行登录和注册。当我在后端使用此代码登录时
router
.route('/auth/token')
.link(() => AuthController(authServer));
我得到了令牌、令牌类型和到期日期,还有机会传递 userId 吗?还是我必须创建自己的控制器才能做到这一点?
更新
或者我如何在我的后端保存数据时保存用户 ID
@Operation.post()
Future<Response> addData(@Bind.body(ignore: ['id']) Data newData) async {
final query = Query<Data>(context)..values = newData;
final insertData = await query.insert();
return Response.ok(insertData);
}
Flutter 前端
最初使用 username/email 和密码登录。如果用户名和密码有效,您将从服务器获得授权令牌。然后使用该令牌向服务器发出进一步的特权请求。
您不需要在客户端上保存有关用户的任何个人数据(电子邮件或密码)。不过,如果您不想让用户在下次使用该应用程序时再次登录,您可以保存令牌。保存令牌时,您应该使用安全存储选项。 Android 上的 flutter_secure_storage plugin uses KeyChain on iOS and KeyStore。
渡槽后端
您可以在后台随意使用用户 ID。不过,我不知道是否需要将它们传递给客户。在后端,您可以查询用户 ID,然后使用它从数据库中获取其他信息。
这是来自 documentation 的示例:
class NewsFeedController extends ResourceController {
NewsFeedController(this.context);
ManagedContext context;
@Operation.get()
Future<Response> getNewsFeed() async {
var forUserID = request.authorization.ownerID;
var query = Query<Post>(context)
..where((p) => p.author).identifiedBy(forUserID);
return Response.ok(await query.fetch());
}
}
客户端只传入了token。 Aqueduct 根据该令牌为您查找用户 ID。现在您知道了用户 ID。
您的其他表可以有一个用户 ID 列,这样只有该用户可以保存和检索他们的数据。上面的例子中,Posts有一个Author,Author有一个ID,也就是用户ID。
where((p) => p.author).identifiedBy(forUserID)
等同于
where((p) => p.author.id).equalTo(forUserID)
您可以在文档的 Advanced Queries 部分阅读相关内容。
我刚刚使用 aqueduct 作为后端制作了简单的身份验证应用程序。我使用渡槽文档页面中的代码进行登录和注册。当我在后端使用此代码登录时
router
.route('/auth/token')
.link(() => AuthController(authServer));
我得到了令牌、令牌类型和到期日期,还有机会传递 userId 吗?还是我必须创建自己的控制器才能做到这一点?
更新 或者我如何在我的后端保存数据时保存用户 ID
@Operation.post()
Future<Response> addData(@Bind.body(ignore: ['id']) Data newData) async {
final query = Query<Data>(context)..values = newData;
final insertData = await query.insert();
return Response.ok(insertData);
}
Flutter 前端
最初使用 username/email 和密码登录。如果用户名和密码有效,您将从服务器获得授权令牌。然后使用该令牌向服务器发出进一步的特权请求。
您不需要在客户端上保存有关用户的任何个人数据(电子邮件或密码)。不过,如果您不想让用户在下次使用该应用程序时再次登录,您可以保存令牌。保存令牌时,您应该使用安全存储选项。 Android 上的 flutter_secure_storage plugin uses KeyChain on iOS and KeyStore。
渡槽后端
您可以在后台随意使用用户 ID。不过,我不知道是否需要将它们传递给客户。在后端,您可以查询用户 ID,然后使用它从数据库中获取其他信息。
这是来自 documentation 的示例:
class NewsFeedController extends ResourceController {
NewsFeedController(this.context);
ManagedContext context;
@Operation.get()
Future<Response> getNewsFeed() async {
var forUserID = request.authorization.ownerID;
var query = Query<Post>(context)
..where((p) => p.author).identifiedBy(forUserID);
return Response.ok(await query.fetch());
}
}
客户端只传入了token。 Aqueduct 根据该令牌为您查找用户 ID。现在您知道了用户 ID。
您的其他表可以有一个用户 ID 列,这样只有该用户可以保存和检索他们的数据。上面的例子中,Posts有一个Author,Author有一个ID,也就是用户ID。
where((p) => p.author).identifiedBy(forUserID)
等同于
where((p) => p.author.id).equalTo(forUserID)
您可以在文档的 Advanced Queries 部分阅读相关内容。