如何在SurrealDB中通过signin返回的JWT Token获取并填充用户对象?
在SurrealDB中利用JWT Token获取并填充用户对象
1. 携带JWT Token发起认证请求
所有需要认证的请求必须在请求头中添加Authorization字段,格式为Bearer <你的JWT Token>,这是SurrealDB识别认证身份的标准方式。
2. 查询当前认证用户对象
SurrealDB内置了$auth变量,直接查询该变量即可获取当前已认证用户的完整记录,无需手动指定用户ID:
curl示例
curl -X POST 'http://你的SurrealDB地址/sql' \ -H 'Authorization: Bearer 你的JWT_TOKEN' \ -H 'Content-Type: application/json' \ -d '{"query": "SELECT * FROM $auth;"}'
JavaScript示例(前端/Node.js)
const jwtToken = "你的JWT_TOKEN"; fetch('http://你的SurrealDB地址/sql', { method: 'POST', headers: { 'Authorization': `Bearer ${jwtToken}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ query: 'SELECT * FROM $auth;' }) }) .then(res => res.json()) .then(data => { // 从返回结果中提取用户对象 const currentUser = data.result[0]; // 在这里用用户对象填充应用逻辑(比如渲染用户信息、存入状态管理) console.log("当前认证用户:", currentUser); }) .catch(err => console.error("获取用户失败:", err));
3. 进阶:关联查询或获取用户ID
如果仅需用户ID,可直接使用user()函数:
SELECT user() AS userId;
若要关联查询用户的关联数据(比如用户的订单),可结合$auth实现:
SELECT * FROM $auth, ->orders->order;
注意事项
- 确保JWT Token未过期,过期后需重新调用
signin()获取新Token Authorization头格式必须严格:Bearer后需跟一个空格,再拼接Token- 提前在用户表(如
user表)定义好所需字段(如email、username),否则$auth返回的对象不会包含这些数据
内容的提问来源于stack exchange,提问作者chovy
相关产品推荐
相关产品推荐

