开始使用
注册
创建应用程序
安装库
构建注册流程
构建登录流程
下一步
最后更新于
最后更新于
yarn add @passwordlessdev/passwordless-clientimport { Client } from '@passwordlessdev/passwordless-client';npm install @passwordlessdev/passwordless-clientimport { Client } from '@passwordlessdev/passwordless-client';<script src="https://cdn.passwordless.dev/dist/1.1.0/esm/passwordless.min.mjs" type="module" crossorigin="anonymous"></script><script type="module">
import { Client } from "https://cdn.passwordless.dev/dist/1.1.0/esm/passwordless.min.mjs"
</script><script src="https://cdn.passwordless.dev/dist/1.1.0/umd/passwordless.umd.min.js" crossorigin="anonymous"></script><script>
const Client = Passwordless.Client;
const p = new Client({});
</script>// Node.js - 为此步骤编写的代码应在您的后端运行。
const payload = {
"userId": "107fb578-9559-4540-a0e2-f82ad78852f7", // 必填。WebAuthn 用户句柄,应由您的应用程序生成。最多 64 字节。
"username": "[email protected]", // 必填。由用户选择的,用于用户身份验证的人类可读的用户名。
// ...有关更多选项,请参阅后端 API 参考中的 /register/token。
};
// 使用您的 API 私有密机密将 payload POST 到 Passwordless.dev API。
const apiUrl = "https://v4.passwordless.dev";
const {token} = await fetch(apiUrl + "/register/token", {
method: "POST",
body: JSON.stringify(payload),
headers: {
"ApiSecret": "myapplication:secret:11f8dd7733744f2596f2a28544b5fbc4",
"Content-Type": "application/json"
}
}).then(r => r.json());{ "token": "register_wWdDh02ItIvnCKT_02ItIvn..." }// 为此步骤编写的代码应在您的前端运行。
import {Client} from "@passwordlessdev/passwordless-client";
// 使用您的 API 公钥实例化无密码客户端。
const p = new Client({
apiKey: "myapplication:public:4364b1a49a404b38b843fe3697b803c8"
});
// 从后端获取返回的注册令牌。
const backendUrl = "https://localhost:7002"; // 您的后端
const registerToken = await fetch(backendUrl + "/create-user").then(r => r.json());
// 在最终用户的设备上注册令牌。
const {token, error} = await p.register(registerToken);
if(token) {
// 成功注册!
} else {
console.error(error);
}// 为此步骤编写的代码应在您的前端运行。
// 使用您的 API 公钥实例化 Passwordless 客户端。
const p = new Client({
apiKey: "myapplication:public:4364b1a49a404b38b843fe3697b803c8"
});
// 允许用户指定一个用户名或别名。
const alias = "[email protected]";
// 为用户生成身份验证令牌。
const {token, error} = await p.signinWithAlias(alias);
// 提示:您也可以尝试使用 p.signinWithDiscoverable();
// 调用您的后端来验证已生成的令牌。
const backendUrl = "https://localhost:7002"; // 您的后端
const verifiedUser = await fetch(backendUrl + "/signin?token=" + token).then(r => r.json());
if(verifiedUser.success === true) {
// 如果成功,继续!
}// 为此步骤编写的代码应在您的后端运行。
// 从前端获取身份验证令牌。
const token = { token: req.query.token };
// 使用您的 API 私有机密将身份验证令牌 POST 到 Passwordless.dev API。
const apiUrl = "https://v4.passwordless.dev";
const response = await fetch(apiurl + "/signin/verify", {
method: "POST",
body: JSON.stringify({token}),
headers: { "ApiSecret": "myapplication:secret:11f8dd7733744f2596f2a28544b5fbc4", "Content-Type": "application/json" }
});
// 将 API 响应(见下文)缓存到变量。
const body = await response.json();
// 检查 API 响应是否成功验证。
// 要查看此端点返回的所有属性,请参阅后端 API 参考中的 /signin/verify。
if (body.success) {
console.log("Successfully verified sign-in for user.", body);
// 设置一个 cookie/userid。
} else {
console.warn("Sign in failed.", body);
}{
"success": true,
"userId": "123",
"timestamp": "2021-08-01T01:33:36.9773187Z",
"rpid": "example.com",
"origin": "http://example.com:3000",
"device": "Chrome, Windows 10",
"country": "",
"nickname": "Home laptop",
"credentialId": "Mq1ZhrHBmhly34YaO/uuXuNuf/VCHDkuknENz/LZJR4=",
"expiresAt": "2021-08-01T01:35:36.9773193Z"
}