微信小程序
信息
Casdoor 1.41.0 起支持微信小程序。
微信小程序不使用标准的 OAuth 跳转,所以登录时是把小程序的登录 code 发给 Casdoor,而不是跳转到 Casdoor 页面。示例:casdoor-wechat-miniprogram-example。另见 微信小程序登录。
配置:CASDOOR_HOSTNAME:Casdoor 服务器地址(例如 https://door.casbin.com)。
步骤1:部署Casdoor
部署 Casdoor 服务器。然后:
- 确认 Casdoor 可以访问并正常工作。
- 在
conf/app.conf中把origin设为CASDOOR_HOSTNAME。

步骤2:配置应用程序
- 在 Casdoor 中创建一个类型为 WeChat 的 OAuth 提供商,填入微信小程序后台的 APPID 和 APPSECRET。

- 创建或编辑一个 Casdoor 应用,加上这个微信提供商。
信息
第 3 步:小程序代码
小程序调用 wx.login() 获取登录 code,再把 code 发给 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操作的持有人令牌。
Tips
目前,Casdoor无法将现有账户绑定到微信小程序用户。在Casdoor从微信获取OpenID后,如果ID不存在,它将创建一个新用户,如果存在,它将使用现有用户。