跳到主内容

微信小程序

信息

从1.41.0版本开始,Casdoor现在支持微信小程序。

介绍

由于微信小程序不支持标准的OAuth,因此无法重定向到自托管的Casdoor登录页面。 因此,使用Casdoor进行微信小程序的过程与常规程序的过程不同。

本文档将解释如何将Casdoor集成到微信小程序中。 您可以在GitHub上找到这个集成的例子:casdoor-wechat-miniprogram-example。 有关更详细的信息,请参阅微信小程序登录文档

配置包括以下名称:

CASDOOR_HOSTNAME:部署Casdoor服务器的域名或IP地址,例如,https://door.casbin.com

步骤1:部署Casdoor

首先,应部署Casdoor服务器

成功部署Casdoor后,您需要确保:

  1. Casdoor可以正常访问和使用。
  2. 将 Casdoor 的 origin 值 (conf/app.conf) 设置为 CASDOOR_HOSTNAMECasdoor 配置

步骤2:配置Casdoor应用程序

  1. 在Casdoor中创建一个微信IDP,并提供微信小程序开发平台给你的APPIDAPPSECRETWeChat_MiniProgram.png
  2. 创建一个新的Casdoor应用程序,或使用一个已经存在的。
  3. 将在上一步中创建的IDP添加到您想要使用的应用程序中。
Tips

为了方便,Casdoor默认将应用中的第一个微信类型的IDP视为微信小程序的IDP。

因此,如果你想在这个应用中使用微信小程序,不要在一个应用中添加多个微信类型的IDP。

步骤3:编写微信小程序代码

微信小程序提供了一个API,用于内部登录并获取代码。 代码应该然后被发送到Casdoor。 Casdoor将使用此代码从微信服务器检索信息(如OpenID和SessionKey)。

以下代码演示了如何完成上述过程:

// 在小程序中登录
wx.login({
success: res => {
// 这是需要发送给Casdoor的登录代码
console.log(res.code)

wx.request({
url: `${CASDOOR_HOSTNAME}/api/login/oauth/access_token`,
method: "POST",
data: {
"tag": "wechat_miniprogram", // 必填
"client_id": "6825f4f0af45554c8952",
"code": res.code,
"username": this.data.userInfo.nickName, // 登录时更新用户资料。
"avatar": this.data.userInfo.avatarUrl,
},
header:{
"content-type": "application/x-www-form-urlencoded",
},
success: res => {
console.log(res)
this.globalData.accessToken = res.data.access_token // 获取Casdoor的访问令牌
}
})
}
})

需要注意的是,tag参数对于告知Casdoor这是来自微信小程序的请求是必须的。

上述代码在登录时包含了微信小程序用户的用户名和头像URI。 您可以选择分别传递这两个参数,然后在成功登录并获取访问令牌后将它们传递给Casdoor:

wx.getUserProfile({
desc: '将您的信息分享给Casdoor',
success: (res) => {
this.setData({
userInfo: res.userInfo,
hasUserInfo: true
})
console.log(app.globalData.accessToken)
wx.request({
url: `${CASDOOR_HOSTNAME}/api/update-user`, // Casdoor URL
method: "POST",
data: {
"owner": "test",
"name": "wechat-oGk3T5tIiMFo3SazCO75f0HEiE7Q",
"displayName": this.data.userInfo.nickName,
"avatar": this.data.userInfo.avatarUrl
},
header: {
"Authorization": "Bearer " + app.globalData.accessToken, // Bearer token
"content-type": "application/json"
},
success: (res) => {
console.log(res)
}
})
}
})

此外,您可以将访问令牌用作您需要的任何Casdoor操作的持有人令牌。

提示

目前,Casdoor无法将现有账户绑定到微信小程序用户。 在Casdoor从微信获取OpenID后,如果ID不存在,它将创建一个新用户,如果存在,它将使用现有用户。