Figma 插件开发与 OAuth 授权完整指南

概述

本指南将帮助你从申请 OAuth 应用开始,到如何在本地和生产环境中使用 Figma 插件。

1. 创建 OAuth 应用

  • 申请应用:

2. 本地开发插件

  • 设置本地服务器:

  • Figma 插件代码示例:

// 在插件中,使用 figma.showUI() 方法打开一个新的 UI 窗口
figma.showUI(__html__, { width: 600, height: 400 });

// 监听 UI 消息,处理用户操作
figma.ui.onmessage = async (msg) => {
    if (msg.type === "login") {
        // 用户请求登录,重定向到 OAuth 授权页面
        const authUrl = `https://www.figma.com/oauth/authorize?client_id=YOUR_CLIENT_ID&response_type=code&redirect_uri=YOUR_CALLBACK_URL`;
        window.open(authUrl, "_blank");
    }
};

3. 用户授权流程

  • 弹出授权界面:

  • 处理授权回调:

QA

  • Q: 授权回调 URL 我应该填什么?

  • Q: Figma 将用户重定向回你的插件,附带一个授权码(code)。这个在本地怎么实现?

4. 交换访问令牌

  • 设置路由处理回调:
// 在本地服务器上,设置一个路由来处理授权回调
app.get('/auth/callback', (req, res) => {
    const code = req.query.code;
    // 使用授权码交换访问令牌
    fetch('<https://www.figma.com/api/oauth/token>', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded',
        },
        body: `client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&grant_type=authorization_code&code=${code}&redirect_uri=YOUR_CALLBACK_URL`,
    })
   .then(response => response.json())
   .then(data => {
        // 存储访问令牌,以便后续使用
        res.send('授权成功,已获取访问令牌');
    })
   .catch((error) => {
        console.error('交换访问令牌失败:', error);
        res.status(500).send('授权失败');
    });
});

5. 部署插件

  • 部署到服务器:

  • 上传到 Figma 应用市场:

QA

  • Q: 我开发插件必须要部署到服务器上么,我上传到 Figma 的应用市场不可以吗?