跳到主内容

WeChat mini program

信息

WeChat Mini Program support is available from Casdoor 1.41.0.

WeChat Mini Program does not use standard OAuth redirects, so sign-in uses the mini program’s login code sent to Casdoor instead of a redirect to the Casdoor page. Example: casdoor-wechat-miniprogram-example. See also WeChat Mini Program login.

Config: CASDOOR_HOSTNAME — the Casdoor server URL (e.g. https://door.casbin.com).

步骤1:部署Casdoor

Deploy the Casdoor server. Then:

  1. Confirm Casdoor is reachable and working.
  2. In conf/app.conf, set origin to CASDOOR_HOSTNAME.

Casdoor 配置

Step 2: Configure the application

  1. In Casdoor, create an OAuth provider with type WeChat and set APPID and APPSECRET from the WeChat Mini Program admin. WeChat_MiniProgram.png
  2. Create or edit a Casdoor application and add that WeChat provider.
Casdoor uses the first WeChat-type provider in the application as the Mini Program IdP. Use only one WeChat provider per app if you use Mini Program.

Step 3: Mini program code

The mini program calls wx.login() to get a login code, then sends that code to Casdoor. Casdoor exchanges it with WeChat for OpenID and SessionKey. Example:

// 在小程序中登录
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不存在,它将创建一个新用户,如果存在,它将使用现有用户。