You need to enable JavaScript to run this app.
文档中心
AI 原生 BaaS 平台 Supabase 版

AI 原生 BaaS 平台 Supabase 版

复制全文
下载 pdf
使用 Authentication
设置微信授权登录
复制全文
下载 pdf
设置微信授权登录
本文介绍通过 Supabase 控制台和 Admin API 配置为应用配置微信登录的操作流程。​
前提条件​
  • 已创建使用 Supabase 引擎的 Workspace 且 Workspace 的状态为运行中。关于创建 Workspace 的更多详细信息,请参见创建 Workspace。​
  • 已通过目标 Workspace 成功登录 Supabase 控制台。关于登录控制台的详细信息,请参见登录 Supabase 控制台。​
  • 已获取 SUPABASE_BASE_URL、SERVICE_ROLE_KEY和 SUPABASE_ANON_KEY。关于获取变量的详细信息,请参见获取变量。​
注意事项​
  • 微信开放平台会校验授权回调域名的归属。如果您需要在授权回调域名根目录下放置校验文件,请参见验证域名归属最佳实践。​
  • 支持的微信授权登录方式:Supabase 目前支持两种微信授权登录方式,这两种方式调用 signInWithOAuth 接口参数略有差异,开发者需要自行判断浏览器环境,并根据所处环境传入不同的参数值。可参考判断微信授权登录环境。​
在 Supabase 控制台查询和修改配置​
  1. 在微信开放平台配置“授权回调域名”。​
参考微信开放平台文档中“授权回调域名”相关章节,配置您的回调域名。微信开放平台的回调域名必须是开发者名下的域名。​
  1. 将回调域名的 Callback 接口 重定向到 Supabase Callback 接口。​
如果授权回调域名需要先完成域名归属校验,请参见验证域名归属最佳实践。​
Supabase 的 Callback URL 为 $SUPABASE_BASE_URL/auth/v1/callback,例如 https://br-xxxx.supabase.aidap-global.cn-beijing.volces.com/auth/v1/callback。​
  1. 查询和修改配置。​
  1. 在 Supabase 控制台查询和修改配置​
  1. 完成微信登录设置。​
  1. 进入 Supabase 控制台后,您需要配置微信作为 OAuth 2.0 提供商,并填入相应的凭证。​
  1. 进入页面 Authentication > Sign In / Providers > WeChat。勾选 Enable WeChat provider,并填入从微信开放平台或微信公众平台获取的 AppID 和 AppSecret,以及 Callback URL。​
注意​
由于通过微信登录无法直接获取用户邮箱,所以请务必勾选 Allow users without an email 。​
  1. 配置重定向白名单。​
  • 进入页面 Authentication > URL Configurations,将您的应用的 URL(登录成功后的跳转目标,精确到 path) 配置到 Redirect URLs 中。​
  • ​​​
  • ​​​
主要配置项说明​
​
Dashobard 配置项名称​
配置项 Key​
配置项 Value 类型​
是否必填​
配置项说明​
Enable WeChat provider​
EXTERNAL_WECHAT_ENABLED​
bool​
是​
是否开启微信注册登录。取值:​
  • true:开启微信注册登录(开关打开)​
  • false:关闭微信注册登录(开关关闭)​
WeChat App ID​
EXTERNAL_WECHAT_CLIENT_ID​
string​
是​
微信开放平台或微信公众平台的 App ID。​
WeChat App Secret​
EXTERNAL_WECHAT_SECRET​
​
string​
是​
微信开放平台或微信公众平台的 App Secret。​
Allow users without an email​
EXTERNAL_WECHAT_EMAIL_OPTIONAL​
​
bool​
否​
是否允许用户邮箱为空。取值:​
  • true:允许用户邮箱为空(开关打开),默认值​
  • false:不允许用户邮箱为空(开关关闭)​
说明​
对于微信场景,通常无法获得用户邮箱,因此强烈建议设置为 true。​
Callback URL (for OAuth)​
EXTERNAL_WECHAT_REDIRECT_URI​
string​
是​
OAuth 回调地址。开发者域名下的服务回调地址,如需完成授权回调域名归属校验,请参见验证域名归属最佳实践。​
Redirect URLs​
URI_ALLOW_LIST​
string​
​
允许重定向的目标 URL 列表。​
  • 需要与跳转目标 URL 完全一致,精确到 path。​
  • 多个时以逗号分隔,形如:http://www.app1.com/home,https://www.app2.com。​
​
通过 Admin API 查询和修改配置​
上述参数可以通过 Auth 模块的 Admin API /auth/v1/config 进行查询和修改配置。​
  • 查询配置的示例​
​
curl -X GET $SUPABASE_BASE_URL/auth/v1/config \​
-H "apikey: ${SERVICE_ROLE_KEY}" \​
-H "Authorization: Bearer ${SERVICE_ROLE_KEY}" \​
-H "Content-Type: application/json"​
​
  • 修改配置的示例,其中 body 为上节表格中的 配置项 Key 和 配置项 Value 组成的 JSON Map​
​
curl -X PATCH $SUPABASE_BASE_URL/auth/v1/config \​
-H "apikey: ${SERVICE_ROLE_KEY}" \​
-H "Authorization: Bearer ${SERVICE_ROLE_KEY}" \​
-H "Content-Type: application/json" \​
-d '{​
"EXTERNAL_WECHAT_ENABLED": true,​
"EXTERNAL_WECHAT_CLIENT_ID": "mywechatappid",​
"EXTERNAL_WECHAT_SECRET": "mywechatappsecret",​
"EXTERNAL_WECHAT_EMAIL_OPTIONAL": "true",​
"URI_ALLOW_LIST": "http://www.app1.com/home,https://www.app2.com",​
...​
}'​
​
示例——通过 Supabase Client SDK 进行微信登录的示例​
Supabase 提供了统一的 signInWithOAuth 方法来微信登录,但根据使用浏览器环境的不同,分为两种模式。​
场景一:在微信内嵌浏览器网页授权登录​
此场景适用于用户在微信客户端内部打开您的网页应用,单击登录时,会直接拉起微信授权界面。​
  • 适用平台:微信内置浏览器。​
  • 实现方式:调用 signInWithOAuth 函数,需要将provider 指定为 wechat 。在 options 中无需显式指定 scopes 字段。​
​
// 在微信内嵌浏览器中发起登录​
async function loginWithWechatEmbedded() {​
try {​
const { error } = await supabase.auth.signInWithOAuth({​
provider: 'wechat',​
options: {​
redirectTo: 'https://www.examples.com/' // 登录成功后的重定向地址​
}​
});​
​
if (error) throw error;​
​
} catch (error) {​
console.error('微信网页应用授权登录失败:', error);​
}​
}​
​
场景二:在 PC 浏览器网页扫码授权登录​
此场景适用于在 PC 浏览器中访问的独立网站。在用户选择微信登录后,页面会生成一个二维码,用户使用微信 APP 扫描该二维码后完成授权登录。​
  • 适用平台:PC 浏览器。​
  • 实现方式:调用 signInWithOAuth 函数时,除了将 provider 指定为 wechat 之外,还需要在 options 中指定 scopes 为 snsapi_login。​
​
// 在PC网站上发起扫码登录​
async function loginWithWechatWeb() {​
try {​
const { data, error } = await supabase.auth.signInWithOAuth({​
provider: 'wechat',​
options: {​
scopes: 'snsapi_login', // scope必须为snsapi_login​
redirectTo: 'https://www.examples.com/' // 登录成功后的重定向地址​
}​
});​
​
if (error) throw error;​
​
} catch (error) {​
console.error('微信网站应用扫码登录失败:', error);​
}​
}​
​
最佳实践:自动判断浏览器环境确定微信授权登录参数​
为了让您的应用同时支持上述两种“微信授权登录”场景,可以通过检测浏览器的 User Agent 来智能判断当前浏览器环境(参见下述 isWechatEmbeddedBrowser 函数),从而实现一套代码支持多场景登录。​
​
// 判断是否在微信内嵌浏览器中​
function isWechatEmbeddedBrowser() {​
return /MicroMessenger/i.test(navigator.userAgent || '');​
}​
​
// 统一的微信登录函数​
async function loginWithWechat() {​
try {​
const options = { redirectTo: 'https://www.examples.com/' };​
​
// 如果不是在微信内嵌浏览器中,则添加扫码登录所需的scopes​
if (!isWechatEmbeddedBrowser()) {​
options.scopes = 'snsapi_login';​
}​
​
const { error } = await supabase.auth.signInWithOAuth({​
provider: 'wechat',​
options​
});​
​
if (error) throw error;​
​
} catch (error) {​
console.error('微信登录失败:', error);​
// 在界面上显示错误提示​
}​
}​
​
最近更新时间:2026.10.22 20:39:35
这个页面对您有帮助吗?
有用
有用
无用
无用