メインコンテンツにスキップ

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を正常にデプロイした後、次のことを確認する必要があります:

  1. Casdoorにアクセスして正常に使用できる。
  2. Set Casdoorのorigin値(conf/app.conf)をCASDOOR_HOSTNAMEに設定します。 Casdoor設定

ステップ2:Casdoorアプリケーションを設定する

  1. CasdoorでWeChat IDPを作成し、WeChatミニプログラム開発プラットフォームから提供されたAPPIDAPPSECRETを提供します。 WeChat_MiniProgram.png
  2. 新しいCasdoorアプリケーションを作成するか、既存のものを使用します。
  3. 前のステップで作成したIDPを使用したいアプリケーションに追加します。
Tips

便宜上、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操作に対してアクセストークンをベアラートークンとして使用することができます。

Tips

現在、Casdoorは既存のアカウントをWeChatミニプログラムユーザーにバインドすることはできません。 CasdoorがWeChatからOpenIDを取得した後、IDが存在しない場合は新しいユーザーを作成し、存在する場合は既存のユーザーを使用します。