flutter - 使用 AuthController 传递用户 ID
问题描述
我刚刚使用渡槽作为后端制作了简单的身份验证应用程序。我使用渡槽文档页面中的代码进行登录和注册。当我在后端使用此代码登录时
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_secure_storage插件在 iOS上使用KeyChain ,在 Android上使用KeyStore 。
渡槽后端
您可以在后端使用所有您想要的用户 ID。不过,我不知道有必要将它们传递给客户。在后端,您可以查询用户 ID,然后使用它从数据库中获取其他信息。
这是文档中的一个示例:
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());
}
}
客户端只传递了令牌。Aqueduct 根据该令牌为您查找用户 ID。现在您知道了用户 ID。
您的其他表可以有一个用户 ID 列,以便只有该用户可以保存和检索他们的数据。在上面的示例中,Posts 有一个 Author,而 Author 有一个 ID,即用户 ID。
where((p) => p.author).identifiedBy(forUserID)
相当于
where((p) => p.author.id).equalTo(forUserID)
您可以在文档的“高级查询”部分阅读相关内容。
推荐阅读
- javascript - Javascript eventListener 仅在元素的某些区域工作
- python - 使用 python-binance api 在 Binance 上转换加密货币
- vb.net - 在 Visual Studio 2017 和 VB.net 中为基于服务的数据库使用数据集和表适配器
- javascript - 在 TypeScript 中设置类的属性/字段给 TypeError
- javascript - Vue 3 和 Firestore 集成的问题
- web3 - 将虚拟钱包私钥导入 solana CLI
- javascript - 如何确定是否在 JavaScript 中勾选了复选框?
- java - javafx - 图形设备初始化失败:es2,sw M1 MacOS
- html - 如何在 item.html 中居中 vega-lite 图形?
- javascript - 如何允许多次尝试测验?