Saltar al contenido principal

WeChat MiniProgram

información

Casdoor ahora soporta WeChat Mini Program a partir de la versión 1.41.0.

Introducción

Dado que WeChat Mini Program no soporta OAuth estandarizado, no puede redirigir a la página web de Casdoor alojada por sí misma para iniciar sesión. Por lo tanto, el proceso de uso de Casdoor para WeChat Mini Program es diferente al de los programas regulares.

Este documento explicará cómo integrar Casdoor en WeChat Mini Program. Puedes encontrar un ejemplo de esta integración en GitHub aquí: casdoor-wechat-miniprogram-example. Para obtener más información detallada, por favor consulta el documento de inicio de sesión de WeChat Mini Program.

La configuración incluye los siguientes nombres:

CASDOOR_HOSTNAME: El nombre de dominio o dirección IP donde se despliega el servidor de Casdoor, por ejemplo, https://door.casbin.com.

Paso 1: Desplegar Casdoor

En primer lugar, el servidor Casdoor debe ser desplegado.

Después de desplegar Casdoor con éxito, necesitas asegurarte de que:

  1. Casdoor puede ser accedido y utilizado normalmente.
  2. Establece el valor de origin de Casdoor (conf/app.conf) en CASDOOR_HOSTNAME. Configuración de Casdoor

Paso 2: Configurar la Aplicación Casdoor

  1. Crea un IDP de WeChat en Casdoor y proporciona el APPID y APPSECRET que te da la plataforma de desarrollo de WeChat Mini Program. WeChat_MiniProgram.png
  2. Crea una nueva aplicación Casdoor o usa una existente.
  3. Añade el IDP creado en el paso anterior a la aplicación que quieras usar.
Tips

Para conveniencia, Casdoor tratará al primer IDP tipo WeChat en la aplicación como el IDP de WeChat Mini Program por defecto.

Por lo tanto, si quieres usar WeChat Mini Program en esta app, no añadas múltiples IDPs tipo WeChat en una sola app.

Paso 3: Escribir Código WeChat MiniProgram

WeChat Mini Program proporciona una API para iniciar sesión internamente y obtener el código. El código debería entonces ser enviado a Casdoor. Casdoor usará este código para recuperar información (como OpenID y SessionKey) del servidor de WeChat.

El siguiente código demuestra cómo lograr el proceso anterior:

// Login in mini program
wx.login({
success: res => {
// This is the login code that needs to be sent to Casdoor
console.log(res.code)

wx.request({
url: `${CASDOOR_HOSTNAME}/api/login/oauth/access_token`,
method: "POST",
data: {
"tag": "wechat_miniprogram", // Required
"client_id": "6825f4f0af45554c8952",
"code": res.code,
"username": this.data.userInfo.nickName, // Update user profile when you log in.
"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 access token
}
})
}
})

Es importante notar que el parámetro tag es obligatorio para informar a Casdoor que esta es una solicitud de WeChat Mini Program.

El código anterior incluye el nombre de usuario y URI del avatar del usuario de WeChat Mini Program durante el inicio de sesión. Puedes elegir pasar estos dos parámetros por separado y luego pasarlos a Casdoor después de un inicio de sesión exitoso y obtener el token de acceso:

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: `${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)
}
})
}
})

Además, puedes usar el token de acceso como un token portador para cualquier operación de Casdoor que requieras.

Tips

Actualmente, Casdoor no puede vincular cuentas existentes con usuarios de WeChat Mini Program. Después de que Casdoor recupera el OpenID de WeChat, creará un nuevo usuario si el ID no existe, o usará el usuario existente si existe.