跳到主内容

微信小程序

信息

Casdoor支持1.41.0版后的微信小程序

既然微信小程序不支持标准的 OAutth,它不能跳转到自主机的 Casdoor 网页进行登录。 因此,使用 Casdoor 用于微信小程序不同于普通方案。 这里将谈论如何访问微信小程序的方案。 更详细的信息可以在微信小程序 登录文档 中找到。

以下是配置中的一些专有名词:

CASDOOR_HOSTNAME:私有部署的Casdoor域名或IP。 例如:https://door.casbin.com.

步骤1. 部署Casdoor

首先,Casdoor 和 GitLab 应该部署完毕。

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

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

步骤2. 配置Casdoor应用程序

  1. 在 casdoor 创建一个wechat idp, 并填写您 APPIDAPPSECRET 由微信小程序开发平台给您: WeChat_MiniProgram.png
  2. 创建或使用现有的 Casdoor 应用程序。
  3. 将上面添加的 idp 添加到您想要使用的应用程序中。
Tips

为方便起见,casdoor 将在应用程序中读取第一个WeChat类型 idp 默认是微信小程序 idp 。

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

步骤3. 写入微信小程序代码

微信小程序提供内部登录和获取代码的API,您需要做的就是将本代码发送到Cassdoor。 cassdoor 将使用此代码从 WeChat 服务器获取一些信息(如OpenID、 SessionKey 等)。

下面的代码显示如何完成上述过程:

// login in mini program
wx.login({
success: res => {
// this is your login code you need to send to casdoor
console.log(res.code)

wx.request({
url: 'http://localhost:8000/api/login/oauth/access_token',
method: "POST",
data: {
"tag":"wechat_miniprogram", //required
"client_id":"6825f4f0af45554c8952",
"client_secret": "2d0f463...",
"code": res.code,
"username": this.data.userInfo.nickName, //update user profile, when you login.
"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 // get casdoor's accessToken
}
})
}
})

值得一提的是,tag 参数是强制性的,您需要让户了解这是来自微信小程序的请求。

上述代码在用户登录时传入微信小程序用户名和头像uri。 您也可以通过这两个参数而不首先传递它们。 然后在登录成功并获得访问令牌后将它们传递到 casdoor :

    wx.getUserProfile({
desc: 'share your info to casdoor',
success: (res) => {
this.setData({
userInfo: res.userInfo,
hasUserInfo: true
})
console.log(app.globalData.accessToken)
wx.request({
url: 'http://`CASDOOR_HOSTNAME`:7001/api/update-user', // casdoor uri
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)
}
})
}
})

此外,您可以使用 accessToken 作为任何Casdoor操作的访问令牌

Tips

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