Loading...
Loading...
Compare original and translation side by side
@auth0/auth0-spa-jsAgent instruction: Before providing SDK setup instructions, fetch the latest release version by running:gh api repos/auth0/auth0-spa-js/releases/latest --jq '.tag_name'Use the returned version in all dependency lines instead of any hardcoded version below. If the command fails, fall back to checking https://github.com/auth0/auth0-spa-js/releases.
@auth0/auth0-spa-jsAgent 指令: 在提供SDK设置说明前,运行以下命令获取最新版本:gh api repos/auth0/auth0-spa-js/releases/latest --jq '.tag_name'将返回的版本替换下方所有依赖行中的硬编码版本。若命令执行失败,可访问https://github.com/auth0/auth0-spa-js/releases查询。
npm install @auth0/auth0-spa-jsVERSION=$(npm view @auth0/auth0-spa-js version)<script src="https://cdn.auth0.com/js/auth0-spa-js/$VERSION/auth0-spa-js.production.js"></script>npm install @auth0/auth0-spa-jsVERSION=$(npm view @auth0/auth0-spa-js version)<script src="https://cdn.auth0.com/js/auth0-spa-js/$VERSION/auth0-spa-js.production.js"></script>.envVITE_AUTH0_DOMAIN=your-tenant.auth0.com
VITE_AUTH0_CLIENT_ID=your-client-idhttp://localhost:5173http://localhost:5173http://localhost:5173.envVITE_AUTH0_DOMAIN=your-tenant.auth0.com
VITE_AUTH0_CLIENT_ID=your-client-idhttp://localhost:5173http://localhost:5173http://localhost:5173import { createAuth0Client } from '@auth0/auth0-spa-js';
const auth0 = await createAuth0Client({
domain: import.meta.env.VITE_AUTH0_DOMAIN,
clientId: import.meta.env.VITE_AUTH0_CLIENT_ID,
authorizationParams: {
redirect_uri: window.location.origin
}
});
// Handle redirect callback after login
const query = new URLSearchParams(window.location.search);
if ((query.has('code') || query.has('error')) && query.has('state')) {
await auth0.handleRedirectCallback();
window.history.replaceState({}, document.title, window.location.pathname);
}import { createAuth0Client } from '@auth0/auth0-spa-js';
const auth0 = await createAuth0Client({
domain: import.meta.env.VITE_AUTH0_DOMAIN,
clientId: import.meta.env.VITE_AUTH0_CLIENT_ID,
authorizationParams: {
redirect_uri: window.location.origin
}
});
// 处理登录后的重定向回调
const query = new URLSearchParams(window.location.search);
if ((query.has('code') || query.has('error')) && query.has('state')) {
await auth0.handleRedirectCallback();
window.history.replaceState({}, document.title, window.location.pathname);
}Agent instruction: Before adding new UI elements, search the project for existing click handlers for login, logout, sign-in, or sign-out buttons. If existing handlers are found, hook the Auth0 code into them without modifying the existing UI. Only create new buttons if no existing handlers are found.
// Login
document.getElementById('login-btn').addEventListener('click', async () => {
await auth0.loginWithRedirect();
});
// Logout
document.getElementById('logout-btn').addEventListener('click', () => {
auth0.logout({
logoutParams: { returnTo: window.location.origin }
});
});
// Update UI based on auth state
const isAuthenticated = await auth0.isAuthenticated();
if (isAuthenticated) {
const user = await auth0.getUser();
console.log(user.name, user.email);
}Agent 指令: 在添加新UI元素前,搜索项目中已有的登录、登出按钮点击处理器。若存在已有处理器,将Auth0代码接入其中,无需修改现有UI。仅在无现有处理器时创建新按钮。
// 登录
document.getElementById('login-btn').addEventListener('click', async () => {
await auth0.loginWithRedirect();
});
// 登出
document.getElementById('logout-btn').addEventListener('click', () => {
auth0.logout({
logoutParams: { returnTo: window.location.origin }
});
});
// 根据认证状态更新UI
const isAuthenticated = await auth0.isAuthenticated();
if (isAuthenticated) {
const user = await auth0.getUser();
console.log(user.name, user.email);
}const accessToken = await auth0.getTokenSilently();
const response = await fetch('https://your-api.example.com/data', {
headers: { Authorization: `Bearer ${accessToken}` }
});const accessToken = await auth0.getTokenSilently();
const response = await fetch('https://your-api.example.com/data', {
headers: { Authorization: `Bearer ${accessToken}` }
});Agent instruction: After completing the integration, build the project to verify it compiles successfully:bashnpm run buildIf the build fails, analyze the error output and fix the issues. Common integration build failures include:
- Module not found: Missing
— run the install commandnpm install @auth0/auth0-spa-js- Cannot find name 'import.meta': TypeScript target too low — set
or higher in"target": "ES2020"tsconfig.json is not a function: Wrong import path or CDN usage without bundle stepcreateAuth0Client- Env vars undefined at runtime: Vite requires
prefix; webpack/CRA requiresVITE_prefixREACT_APP_Re-run the build after each fix. Track the number of build-fix iterations.Failcheck: If the build still fails after 5–6 fix attempts, stop and ask the user using: "The build is still failing after several fix attempts. How would you like to proceed?"AskUserQuestion
- Let the skill continue fixing iteratively — continue the build-fix loop for another 5–6 attempts
- Fix it manually — show the remaining errors and let the user resolve them
- Skip build verification — proceed without a successful build
Agent 指令: 完成集成后,构建项目以验证编译是否成功:bashnpm run build若构建失败,分析错误输出并修复问题。常见集成构建失败原因包括:
- 模块未找到:缺少
——执行安装命令npm install @auth0/auth0-spa-js- 找不到名称'import.meta':TypeScript目标版本过低——在
中设置tsconfig.json或更高版本"target": "ES2020" 不是函数:导入路径错误或未通过打包步骤使用CDNcreateAuth0Client- 运行时环境变量未定义:Vite要求变量前缀为
;webpack/CRA要求前缀为VITE_REACT_APP_每次修复后重新运行构建。记录构建-修复迭代次数。失败检查: 若经过5-6次修复尝试后构建仍失败,停止操作并使用询问用户: "经过多次修复尝试后,构建仍失败。你希望如何继续?"AskUserQuestion
- 让技能继续迭代修复——继续进行5-6次构建-修复循环
- 手动修复——显示剩余错误,由用户自行解决
- 跳过构建验证——无需成功构建直接继续
.env.env| Mistake | Fix |
|---|---|
Callback URL port mismatch (e.g., | Match Allowed Callback URLs exactly to your dev server port in Auth0 Dashboard |
| SPAs must never have a client secret — remove it. Auth0 sets auth method to |
Tokens stored in | Use in-memory storage (default) or |
| Add your app origin to Allowed Web Origins in Auth0 Dashboard |
| Must call after login redirect to exchange the auth code; without this the URL params persist and re-trigger |
Domain includes | Auth0 domain should be hostname only: |
| Popups must be triggered directly from a user gesture (click handler). Never call from init or page load code |
Using | For Vanilla JS, use |
| 错误 | 修复方案 |
|---|---|
回调URL端口不匹配(如 | 在Auth0控制台中,确保允许回调URL与开发服务器端口完全一致 |
SPA代码中包含 | SPA绝不能包含客户端密钥——删除该密钥。Auth0会为SPA应用设置认证方式为 |
令牌存储在 | 使用内存存储(默认)或 |
页面刷新时 | 在Auth0控制台中,将应用源添加至允许Web源 |
重定向后未调用 | 登录重定向后必须调用该方法以交换认证码;否则URL参数会保留并重复触发 |
域名包含 | Auth0域名应仅为主机名: |
在异步初始化代码中调用 | 弹窗必须由用户手势(点击处理器)直接触发。绝不能在初始化或页面加载代码中调用 |
在Vanilla JS中使用 | 对于Vanilla JS,直接使用 |
| Method | Description |
|---|---|
| Create and initialize client (calls |
| Instantiate without auto session check |
| Redirect to Auth0 Universal Login |
| Open Auth0 login in a popup |
| Clear session and redirect |
| Process redirect result after login |
| |
| |
| |
| Attempt silent re-authentication |
| 方法 | 描述 |
|---|---|
| 创建并初始化客户端(内部调用 |
| 实例化客户端,不自动检查会话 |
| 重定向至Auth0 Universal Login |
| 在弹窗中打开Auth0登录界面 |
| 清除会话并重定向 |
| 处理登录后的重定向结果 |
| 返回 |
| 返回 |
| 返回 |
| 尝试静默重新认证 |