.env 文件

openclaw 中文openclaw 2

OpenClaw 平台的一键登录功能实现通常涉及以下步骤:

.env 文件-第1张图片-OpenClaw下载中文-AI中文智能体

前端实现

初始化配置

// 引入SDK
import OpenClaw from 'openclaw-sdk';
// 初始化
const claw = new OpenClaw({
  appId: 'your_app_id',
  redirectUri: 'https://yourdomain.com/callback'
});

一键登录按钮

<button onclick="quickLogin()" class="claw-login-btn">
  <img src="claw-icon.png" alt="OpenClaw">
  一键登录
</button>

触发登录

async function quickLogin() {
  try {
    // 获取授权码
    const authCode = await claw.getAuthCode();
    // 发送到后端验证
    const response = await fetch('/api/claw-login', {
      method: 'POST',
      body: JSON.stringify({ code: authCode })
    });
    const data = await response.json();
    if (data.success) {
      // 登录成功,保存token
      localStorage.setItem('token', data.token);
      window.location.href = '/dashboard';
    }
  } catch (error) {
    console.error('登录失败:', error);
  }
}

后端验证

Node.js 示例

const axios = require('axios');
app.post('/api/claw-login', async (req, res) => {
  const { code } = req.body;
  try {
    // 1. 使用code换取access_token
    const tokenResponse = await axios.post('https://api.openclaw.com/oauth/token', {
      code,
      app_id: process.env.CLAW_APP_ID,
      app_secret: process.env.CLAW_APP_SECRET,
      grant_type: 'authorization_code'
    });
    const { access_token, openid } = tokenResponse.data;
    // 2. 获取用户信息
    const userInfo = await axios.get('https://api.openclaw.com/userinfo', {
      headers: { Authorization: `Bearer ${access_token}` }
    });
    // 3. 创建或查找本地用户
    let user = await User.findOne({ openid });
    if (!user) {
      user = await User.create({
        openid,
        nickname: userInfo.data.nickname,
        avatar: userInfo.data.avatar
      });
    }
    // 4. 生成本地JWT
    const token = generateJWT(user);
    res.json({
      success: true,
      token,
      user
    });
  } catch (error) {
    res.status(401).json({ success: false, error: error.message });
  }
});

Python Flask 示例

import requests
from flask import request, jsonify
@app.route('/api/claw-login', methods=['POST'])
def claw_login():
    code = request.json.get('code')
    # 换取access_token
    token_url = 'https://api.openclaw.com/oauth/token'
    token_data = {
        'code': code,
        'app_id': CLAW_APP_ID,
        'app_secret': CLAW_APP_SECRET,
        'grant_type': 'authorization_code'
    }
    token_resp = requests.post(token_url, data=token_data).json()
    access_token = token_resp['access_token']
    # 获取用户信息
    user_url = 'https://api.openclaw.com/userinfo'
    headers = {'Authorization': f'Bearer {access_token}'}
    user_info = requests.get(user_url, headers=headers).json()
    # 处理用户数据
    return jsonify({'success': True, 'user': user_info})

安全注意事项

验证回调

// 验证回调URL
app.get('/callback', (req, res) => {
  const { code, state } = req.query;
  // 验证state防止CSRF攻击
  if (state !== req.session.state) {
    return res.status(400).send('Invalid state');
  }
  // 继续处理
});

HTTPS 要求

  • 生产环境必须使用HTTPS
  • 确保redirect_uri安全

Session 管理

// 生成随机state
function generateState() {
  return crypto.randomBytes(16).toString('hex');
}

配置步骤

开放平台配置

  1. 登录 OpenClaw 开发者平台
  2. 创建应用,获取 AppID 和 AppSecret
  3. 配置回调域名
  4. 设置应用权限

环境变量

CLAW_APP_SECRET=your_app_secret
CLAW_REDIRECT_URI=https://yourdomain.com/callback

常见问题处理

错误处理

claw.getAuthCode().catch(error => {
  switch (error.code) {
    case 'USER_CANCEL':
      console.log('用户取消登录');
      break;
    case 'NETWORK_ERROR':
      console.log('网络错误');
      break;
    default:
      console.log('未知错误:', error);
  }
});

降级方案

// 如果一键登录失败,显示传统登录
async function loginWithFallback() {
  try {
    await quickLogin();
  } catch (error) {
    showTraditionalLogin();
  }
}

注意事项

  1. 遵守平台规范:参考 OpenClaw 官方文档
  2. 用户隐私:明确告知用户授权范围
  3. 测试环境:使用沙箱环境进行测试
  4. 版本兼容:关注 SDK 版本更新

具体实现细节请参考 OpenClaw 官方文档 的最新指南,不同平台可能有特定要求。

标签: 环境变量 配置文件

抱歉,评论功能暂时关闭!