WeChatミニプログラム
Casdoorはバージョン1.41.0からWeChatミニプログラムをサポートしています。
紹介
WeChatミニプログラムは標準化されたOAuthをサポートしていないため、自己ホスト型のCasdoorウェブページにリダイレクトしてログインすることはできません。 したがって、WeChatミニプログラムでCasdoorを使用するプロセスは通常のプログラムとは異なります。
このドキュメントでは、WeChatミニプログラムにCasdoorを統合する方法について説明します。 GitHubでこの統合の例をこちらで見つけることができます:casdoor-wechat-miniprogram-example。 より詳細な情報については、WeChatミニプログラムのログインドキュメントを参照してください。
設定には以下の名前が含まれます:
CASDOOR_HOSTNAME
:Casdoorサーバーがデプロイされているドメイン名またはIPアドレス、例:https://door.casbin.com
。
ステップ1:Casdoorをデプロイする
まず、Casdoorサーバーをデプロイする必要があります。
Casdoorを正常にデプロイした後、次のことを確認する必要があります:
- Casdoorにアクセスして正常に使用できる。
- Set Casdoorの
origin
値(conf/app.conf)をCASDOOR_HOSTNAME
に設定します。
ステップ2:Casdoorアプリケーションを設定する
- CasdoorでWeChat IDPを作成し、WeChatミニプログラム開発プラットフォームから提供された
APPID
とAPPSECRET
を提供します。 - 新しいCasdoorアプリケーションを作成するか、既存のものを使用します。
- 前のステップで作成したIDPを使用したいアプリケーションに追加します。
便宜上、Casdoorはアプリケーション内の最初のWeChatタイプIDPをデフォルトでWeChatミニプログラムIDPとして扱います。
したがって、このアプリでWeChatミニプログラムを使用したい場合は、1つのアプリに複数のWeChatタイプIDPを追加しないでください。
ステップ3:WeChatミニプログラムコードを書く
WeChatミニプログラムは、内部的にログインしてコードを取得するAPIを提供します。 その後、コードをCasdoorに送信する必要があります。 Casdoorはこのコードを使用して、WeChatサーバーから情報(OpenIDやSessionKeyなど)を取得します。
以下のコードは、上記のプロセスを実行する方法を示しています:
// 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
パラメータは、これがWeChatミニプログラムからのリクエストであることをCasdoorに通知するために必須であることに注意してください。
上記のコードには、ログイン時のWeChatミニプログラムユーザーのユーザー名とアバターURIが含まれています。 これら2つのパラメータを別々に渡し、成功したログインとアクセストークンの取得後に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)
}
})
}
})
さらに、必要なCasdoor操作に対してアクセストークンをベアラートークンとして使用することができます。
現在、Casdoorは既存のアカウントをWeChatミニプログラムユーザーにバインドすることはできません。 CasdoorがWeChatからOpenIDを取得した後、IDが存在しない場合は新しいユーザーを作成し、存在する場合は既存のユーザーを使用します。