资讯动态

Puter JS SDK `puter.auth.signOut()` 详解:登出当前用户的本地会话清理机制

发布时间:2026/9/9 13:05:17 来源:尧图企业网站定制
Puter JS SDKputer.auth.signOut()详解登出当前用户的本地会话清理机制【免费下载链接】puter The Internet Computer! Free, Open-Source, and Self-Hostable.项目地址: https://gitcode.com/GitHub_Trending/pu/puterputer.auth.signOut()是 Puter JavaScript SDK 中负责将当前用户从应用登出的方法。它属于 puter.auth 认证模块文档见 signOut.md适用于**网站websites与 Puter 应用apps**两类平台用于让你的应用具备退出登录/切换账号能力。读完本文你将掌握该 API 的调用语法、底层令牌清理机制、本地存储行为、不同运行环境的限制以及如何与signIn()、isSignedIn()、getUser()配合搭建一套完整的登录/登出流程。方法概述puter.auth.signOut()该方法将当前用户从你的应用中登出。与signIn()需要弹窗、返回 Promise 不同signOut()是一个纯本地、同步、无返回值的操作——它只负责丢弃 SDK 在当前页面持有的认证令牌并不会向服务端发起任何注销会话的网络请求。一个典型使用场景是在页面上放置退出或切换账号按钮点击后调用本方法清除本站点保存的令牌用户下次再调用需要鉴权的puter.*能力时SDK 会重新引导其完成登录。语法puter.auth.signOut()参数无。该方法不接受任何参数也不需要回调函数。返回值无返回undefined。调用成功后puter.auth.isSignedIn()将立即返回false。底层实现一次本地令牌清理的完整链条从源码层面看Auth.js 中的signOut实现非常简洁——它只是转发调用 SDK 核心实例的resetAuthToken()// src/puter-js/src/modules/Auth.js signOut () { puter.resetAuthToken(); };而 index.js 中的resetAuthToken()与_clearAuthToken()才是真正执行清理的地方// src/puter-js/src/index.js _clearAuthToken function () { this.authToken null; if (this.env web || this.env app) { try { localStorage.removeItem(STORAGE_KEY_V2); // puter.auth.token.v2 localStorage.removeItem(STORAGE_KEY_ORIGIN_V2); // puter.auth.token.origin.v2 localStorage.removeItem(STORAGE_KEY_V1); // puter.auth.token已废弃的 v1 键 } catch (error) { console.error(Error accessing localStorage:, error); } } }; resetAuthToken function () { if (this.env web-worker || this.env service-worker) { throw new Error(Sign out is not permitted from WebWorkers or ServiceWorkers); } this._clearAuthToken(); this._emitAuthStateChanged(); };由此可以归纳出signOut()的三个关键动作清空内存令牌将 SDK 实例的authToken置为null后续所有 API 请求不再携带Authorization: Bearer token头清除本地持久化令牌当 SDK 运行在第三方网站web或 Puter 应用app环境时同时移除localStorage中的三个键——puter.auth.token.v2当前 v2 令牌、puter.auth.token.origin.v2令牌绑定的 API 来源、puter.auth.token已停用的 v1 遗留键保证其不会比新令牌存活更久广播认证状态变化调用_emitAuthStateChanged()让 SDK 内部监听认证状态变化的逻辑例如需根据登录态切换的连接、缓存等同步更新。值得注意的是令牌写入方 setAuthToken 会在web/app环境下把令牌连同其来源绑定写入localStorage令牌只能重放给铸造它的那个 API Origin而signOut()的清理逻辑与此严格对称确保不会残留任何可被下次启动拾取的凭证。关键行为与事实围绕源码与测试用例auth.suite.tssignOut()有以下行为要点值得注意登出是应用本地的而非全局的它只清除当前浏览器 Origin/SDK 实例持有的令牌。用户的 Puter 账号会话本身不会被销毁你在其他站点或设备上的登录状态不受影响。这也意味着如果只是想让当前页面恢复为未登录以便重新走登录流程调用本方法即可无需任何服务端配合。登出后isSignedIn()立即变为false测试用例signOut clears the session client-side验证了signOut()之后puter.auth.isSignedIn()返回false随后用setAuthToken()恢复令牌后isSignedIn()又回到true。登出后调用getUser()会快速失败当 SDK 内没有任何令牌时getUser()会直接抛出{ status: 401, message: Unauthorized }而不是真的发起一次注定失败的请求。Worker 环境禁止登出resetAuthToken()在web-worker与service-worker环境下会抛出Error(Sign out is not permitted from WebWorkers or ServiceWorkers)。测试用例signOut is refused in every worker environment强制将环境切换为web-worker、service-worker后断言signOut()被拒绝且被拒绝的登出必须保持令牌完好isSignedIn()仍为true。这与 Puter 的 Serverless Workers 运行时模型一致Worker 的令牌由调用它的会话/事件提供Worker 自身不应有登出语义。完整示例带登录/登出切换的页面以下是基于官方文档示例signOut.md扩展出的可运行页面演示按钮驱动的登出以及登录后回跳再登出的完整闭环!-- 仅登出用途的页面加载 SDK 后立即清除本站点登录态 -- html body script srchttps://js.puter.com/v2//script script puter.auth.signOut(); // 此时 puter.auth.isSignedIn() 已返回 false console.log(Signed out:, !puter.auth.isSignedIn()); /script /body /html!-- 含退出登录按钮的应用页面 -- html body script srchttps://js.puter.com/v2//script button idsign-out hiddenSign out/button script // 页面加载时依据登录态决定是否显示登出按钮 if (puter.auth.isSignedIn()) { document.getElementById(sign-out).hidden false; } // signOut() 必须由用户操作触发与 signIn() 打开弹窗的约束不同 // 它本身不弹窗但放在按钮事件里能保证页面交互语义清晰。 document.getElementById(sign-out).addEventListener(click, () { puter.auth.signOut(); location.reload(); // 刷新页面以应用未登录界面 }); /script /body /html作为参照仓库的 puter-js/test/index.html 中即展示了类似的实战用法页面通过isSignedIn()判断登录态在用户已登录时渲染(logout)链接点击后调用await puter.auth.signOut();完成登出。与signIn()、isSignedIn()、getUser()配合使用signOut()在puter.auth模块中通常与下列方法搭配构成完整的认证闭环API作用说明puter.auth.signIn()发起登录打开认证弹窗返回解析为SignInResult的 Promise必须由用户手势如 click触发puter.auth.signOut()退出登录本地清除令牌无参数、无返回值puter.auth.isSignedIn()查询登录态返回true/false适合在渲染 UI 前判断puter.auth.getUser()读取用户信息未登录时快速抛出401 Unauthorized文档 signIn.md 中特别强调Puter SDK 中绝大多数方法都会自动完成认证signIn()/signOut()等仅在你希望自己掌控认证流程时才需要显式调用。因此一个常见的判断标准是如果登出仅是某个一次性操作的附带步骤且页面即将跳转/刷新直接调用puter.auth.signOut()即可如果需要依据登出结果即时切换 UI再结合isSignedIn()与getUser()的组合状态刷新视图。需要留意的是对于在 Puter 平台上运行的 Appenv app其登录态来自启动它的 Puter 会话令牌由启动 URL 注入因此该类环境更多使用isSignedIn()/getUser()读取会话身份而登出按钮这类功能通常属于第三方网站集成场景env web调用方应结合自身页面路由决定登出后的去向。运行时环境与适用限制支持平台websites、apps由文档 frontmatter 中的platforms字段标注。不支持 Worker在web-worker/service-worker含 Puter Serverless Workers环境中调用将抛出异常且不会破坏现有令牌。Node.jssignOut()面向浏览器 DOM 场景设计SDK 在 Node.js/服务端环境中通常由宿主直接管理令牌生命周期不依赖本方法做本地清理。无服务端副作用如需在服务端同时吊销令牌或结束会话请结合你的后端认证策略另行处理signOut()不承担服务端职责。延伸阅读API 文档src/docs/src/Auth/signOut.md、signIn.md、isSignedIn.md模块实现src/puter-js/src/modules/Auth.jssignOut、signIn、isSignedIn、getUser令牌存储与清除逻辑src/puter-js/src/index.jssetAuthToken、_clearAuthToken、resetAuthToken、STORAGE_KEY_*定义认证行为测试src/puter-js/tests/api/suites/auth.suite.ts【免费下载链接】puter The Internet Computer! Free, Open-Source, and Self-Hostable.项目地址: https://gitcode.com/GitHub_Trending/pu/puter创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价