WeChat MiniProgram
Casdoor теперь поддерживает WeChat Mini Program начиная с версии 1.41.0.
Введение
Поскольку WeChat Mini Program не поддерживает стандартизированный OAuth, он не может перенаправить на самостоятельно размещенную веб-страницу Casdoor для входа. Следовательно, процесс использования Casdoor для WeChat Mini Program отличается от обычных программ.
Этот документ объяснит, как интегрировать Casdoor в WeChat Mini Program. Пример этой интеграции можно найти на GitHub здесь: casdoor-wechat-miniprogram-example. Для более подробной информации, пожалуйста, обратитесь к документу входа WeChat Mini Program login document.
Конфигурация включает следующие имена:
CASDOOR_HOSTNAME
: Доменное имя или IP-адрес, где развернут сервер Casdoor, например,https://door.casbin.com
.
Шаг 1: Развертывание Casdoor
Во-первых, должен быть развернут сервер Casdoor.
После успешного развертывания Casdoor, вам нужно убедиться:
- Casdoor может быть доступен и использоваться нормально.
- Установите значение
origin
для Casdoor (conf/app.conf) вCASDOOR_HOSTNAME
.
Шаг 2: Настройка приложения Casdoor
- Создайте WeChat IDP в Casdoor и предоставьте
APPID
иAPPSECRET
, данные вам платформой разработки WeChat Mini Program. - Создайте новое приложение Casdoor или используйте существующее.
- Добавьте созданный на предыдущем шаге IDP в приложение, которое вы хотите использовать.
Для удобства Casdoor будет по умолчанию рассматривать первый WeChat тип IDP в приложении как IDP WeChat Mini Program.
Следовательно, если вы хотите использовать WeChat Mini Program в этом приложении, не добавляйте несколько WeChat типов IDP в одно приложение.
Шаг 3: Написание кода WeChat MiniProgram
WeChat Mini Program предоставляет API для внутреннего входа и получения кода. Затем код должен быть отправлен в Casdoor. Casdoor будет использовать этот код для получения информации (такой как OpenID и SessionKey) с сервера WeChat.
Следующий код демонстрирует, как выполнить вышеуказанный процесс:
// 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
}
})
}
})
Важно отметить, что параметр tag
обязателен, чтобы сообщить Casdoor, что это запрос от WeChat Mini Program.
Вышеуказанный код включает имя пользователя и URI аватара пользователя WeChat Mini Program во время входа. Вы можете выбрать передачу этих двух параметров отдельно, а затем передать их в 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: `${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)
}
})
}
})
Кроме того, вы можете использовать токен доступа как токен типа bearer для любой операции Casdoor, которая вам требуется.
В настоящее время Casdoor не может связать существующие аккаунты с пользователями WeChat Mini Program. После того как Casdoor получит OpenID от WeChat, он либо создаст нового пользователя, если ID не существует, либо использует существующего пользователя, если он есть.