跳转到内容

认证

认证方式有两种。一种是使用用户名和密码进行认证,这需要使用DEFINE USER语句定义的用户名和密码;另一种是使用DEFINE ACCESS语句定义的自定义认证。在这里,我们将前者称为“用户认证”,后者称为“访问认证”。

.signin() 实例 方法

使用用户认证或访问认证登录SurrealDB。

signin(auth: Auth, options?: ClientRpcOptions): Promise<Jwt>;

参数

auth

用户认证或访问认证所需的信息。每种认证类型所需的参数如下:

认证类型参数
根用户{ user: string, pass: string }
命名空间用户{ user: string, pass: string, ns: string }
数据库用户{ user: string, pass: string, ns: string, db: string }
作用域用户{ sc: string, ns: string, db: string, [param: string]: unknown }
options

PRC 请求的选项。

返回值

返回一个 Promise 对象,该对象将解析为 Jwt

示例

以下示例使用根用户登录SurrealDB:

import { Surreal } from "@tai-kun/surrealdb";
const db = new Surreal();
await db.connect("ws://localhost:8000");
const jwt = await db.signin({
user: "root",
pass: "passw0rd",
});
console.log(jwt.issuedAt); // 例如 1722749786
console.log(jwt.expiresAt); // 例如 1722753386
console.log(jwt.namespace); // undefined
console.log(jwt.database); // undefined
console.log(jwt.access); // undefined
console.log(jwt.user); // 'root'
console.log(jwt.raw); // 'eyJ0eXAiOiJKV1QiLCJhb ... '
console.log(JSON.stringify(jwt)); // '"[REDACTED]"'
await db.disconnect();

以下示例使用命名空间用户登录SurrealDB:

import { Surreal } from "@tai-kun/surrealdb";
const db = new Surreal();
await db.connect("ws://localhost:8000");
const jwt = await db.signin({
ns: "my_namespace",
user: "ns_user",
pass: "passw0rd",
});
console.log(jwt.namespace); // 'my_namespace'
console.log(jwt.database); // undefined
console.log(jwt.access); // undefined
console.log(jwt.user); // 'ns_user'
await db.disconnect();

以下示例使用数据库用户登录SurrealDB:

import { Surreal } from "@tai-kun/surrealdb";
const db = new Surreal();
await db.connect("ws://localhost:8000");
const jwt = await db.signin({
ns: "my_namespace",
db: "my_database",
user: "db_user",
pass: "passw0rd",
});
console.log(jwt.namespace); // 'my_namespace'
console.log(jwt.database); // 'my_database'
console.log(jwt.access); // undefined
console.log(jwt.user); // 'db_user'
await db.disconnect();

以下示例使用作用域用户登录SurrealDB。.user 将设置为记录 ID:

import { Surreal } from "@tai-kun/surrealdb";
const db = new Surreal();
await db.connect("ws://localhost:8000");
const jwt = await db.signin({
ns: "my_namespace",
db: "my_database",
sc: "account",
// ...参数
});
console.log(jwt.namespace); // 'my_namespace'
console.log(jwt.database); // 'my_database'
console.log(jwt.scope); // 'account'
console.log(jwt.user); // 例如 'user:⟨tai-kun⟩'
await db.disconnect();

.signup() 实例 方法

使用作用域用户注册SurrealDB。

signup(auth: RecordAccessAuth, options?: ClientRpcOptions): Promise<Jwt>;

参数

auth

作用域用户所需的信息。

options

PRC 请求的选项。

返回值

返回一个 Promise 对象,该对象将解析为 Jwt

示例

import { Surreal } from "@tai-kun/surrealdb";
const db = new Surreal();
await db.connect("ws://localhost:8000");
const jwt = await db.signup({
ns: "my_namespace",
db: "my_database",
sc: "account",
// ...参数
});
console.log(jwt.namespace); // 'my_namespace'
console.log(jwt.database); // 'my_database'
console.log(jwt.scope); // 'account'
console.log(jwt.user); // 例如 'user:⟨tai-kun⟩'
await db.disconnect();

.authenticate() 实例 方法

使用JWT认证当前连接。

authenticate(token: string | Jwt, options?: ClientRpcOptions): Promise<void>

参数

token

要认证的JWT。

options

RPC 请求的选项。

返回值

返回一个解析为 undefinedPromise 对象。

.invalidate() 实例 方法

使当前连接的认证失效。

invalidate(options?: ClientRpcOptions): Promise<void>

参数

options

RPC 请求的选项。

返回值

返回一个解析为 undefinedPromise 对象。