Dani1
2018 年 7 月 2 日午後 6:07
21
Hi Eva, I went over your code and there’s no errors that I can spot - and I totally get your frustration. If it hadn’t been for Simon Cossar I don’t know how I’d have resolved it myself.
So, taking it backwards: if the PHP is correct, then something else must be disconnected. (browniepoints for me, yay.)
But…
I don’t know enough about any of that to be able to give suggestions or help.
If you’ve got your forum parked with the boys from Discourse Hosting, you could ask Richard (his name tag won’t pop, but this is his profile: Profile - RGJ - Discourse Meta )
Or perhaps @simon might be able to provide you with the missing steps.
Keeping my fingers crossed for you.
edit:
p.s. these are all the related plug-ins i use (+ that PHP one)
(Memberpress Drip is email marketing, so not related to this)
Evapy
2018 年 7 月 2 日午後 6:17
22
At least the code is okay…
Just going to ask some easy questions just to be sure it’s not a stupid mistake :
On discourse :
Are your groups hidden/closed/opened ?
Is your group full name different from the name and default title ? Which one is considered by the PHP code ?
Have you done anything special in the parameters section concerning this ?
On wordpress :
Does your WP-Discourse plugin have specific settings/webhooks for this ?
Do you validate the user’s email when they register on wordpress or you use Discourse’s email validation ?
I’m not sure the issue is there but I always take a shot, thank you again !
Dani1
2018 年 7 月 2 日午後 6:41
23
On Discourse:
groups are any and all: closed and opened (i don’t give access to hidden groups, come to think of it)
these are some of the group names as displayed in ‘Groups’ - and as you can see, the “NoSpacesNames” are the ones that coincide with the PHP settings
If by parameters you mean the following, then no:
nor in the actual group settings (where you create it, with name, owner, etc.), it’s all straight forward and not connected to accessing through SSO - so setting or not setting this as a person’s primary group is not relavant.
There is one webhook here on Discourse that I put in as instructed by the WP-Discourse plugin:
but I don’t actually have that box checked…
email verification technically goes via memberpress: they (my wp-instance) send the log-in details to the user. by clicking the log-in link the users verify their address.
i know for a fact that it’s not through Discourse, because for a while it ALSO went through discourse (glitch somewhere) and Richard sorted that for me.
you’re welcome!
この方法で、Discourse において有料でアカウントを作成した際にメンバーを信頼レベル 2 に設定し、月額料金の支払いがない場合に信頼レベル 1 に引き下げることは可能でしょうか?
Dani1
2020 年 4 月 3 日午後 5:07
25
しばらく見ていませんでしたが、必要なのは、Discourse のコードと決済コード(私の場合は MemberPress)との間の連携です。
つまり、支払いが停止すると MemberPress がそのユーザーのコードを変更し、そのコードが異なるグループレベルに対応します。
決済との連携がなければ、グループレベルは調整されません。
あ、待って。
質問を再確認しましたが、信頼レベル(trust level)の仕組みについては確信がありません…
ただ、他の方法がうまくいかない場合は、信頼レベル 2 に設定されたグループと、信頼レベル 1 に設定されたグループをそれぞれ簡単に作成し、メンバーシッププラグインでそれらのグループをメンバーに割り当てることもできます。
参考になれば幸いです。もしダメなら、また詳しく調べてみます。前回の会話をきっかけに導入して以来、ずっと問題なく動作しており、それ以降は確認していませんでした。
それは素晴らしいアイデアですね!はい、Discourse のグループに信頼レベルを設定することは可能です。ただし、MemberPress についてはまだ十分に経験がありません。
MemberPress で有料ユーザーを自動的に特別なグループに追加することはできますか?
simon
2020 年 4 月 3 日午後 5:56
27
これは今日の Meta の別の投稿で取り上げられたため、ユーザーの信頼レベルが、より低い信頼レベルを設定するグループに追加されることで低下するかどうかを確認するためにコードを確認しました。コードを確認したところ、これは不可能であることがわかりました。
def grant
if @user.trust_level < @trust_level
@user.change_trust_level!(@trust_level)
@user.save!
end
end
ユーザーの信頼レベルが、グループによって付与される信頼レベルよりも低い場合、そのユーザーをグループに追加すると信頼レベルが更新されます。それ以外の場合、ユーザーの信頼レベルに変更はありません。
Dani1
2020 年 4 月 3 日午後 5:56
28
おそらく、同じことができる他のメンバーシッププラグインもあるでしょう。
ここは午後8時で、私は今日の仕事が終わります。もしさらにサポートが必要であれば、朝に調べてあげますので、お知らせください。
Dani1
2020 年 4 月 3 日午後 5:58
29
少し錆びついていますが(それに、もう遅い時間なので)、信頼レベルは実際には関係ないと思います。私は信頼レベルを全く使っていません。グループ TL 2 は「これ」にアクセスでき、グループ TL 1 はアクセスできません。
実際の信頼レベルは使用されていません。許可を信頼レベルではなくグループにのみ設定している場合、任意のメンバーは信頼レベル 1 であっても(支払いを通じて)グループ TL 4 にアクセスできるようになります。
simon
2020 年 4 月 3 日午後 6:01
30
はい、このアプローチではグループとカテゴリのセキュリティ権限を使用します。信頼レベルに依存する必要はありません。
Solari
2020 年 8 月 15 日午後 9:29
31
@Dani1 さん、ご自身の経験や苦労を共有していただきありがとうございます。MemberPress を利用している私のような他のユーザーにとっても非常に役立ちます。
確かにその通りですが、メンバーのサブスクリプションが期限切れになったにもかかわらず、ログアウトせずにグループへのアクセスを継続した場合にどうなるのか気になります。この点で問題が発生したことはありますか?
もしそうであれば、強制的に更新やログアウトを行う方法はないかと考えています。
よろしくお願いいたします。
Ray
RGJ
(Richard - Communiteq)
2020 年 8 月 15 日午後 10:08
32
Solari
2020 年 8 月 15 日午後 10:28
33
@RGJ 解決策としてマークされた上記のコード はグループからメンバーを削除しますが、Dani1 が指摘した通り、ログアウトするまで機能しないとのことです。
simon
2020 年 8 月 15 日午後 10:37
34
通常の SSO ログインプロセスを通じてユーザーが更新された場合、ログアウトして再度ログインするまで更新は適用されません。上記のコード例は問題への対処として最も簡単な方法ですが、グループメンバーシップの管理方法として最適とは限りません。
WP Discourse プラグインには、WordPress が Discourse の SSO プロバイダーサイトとして機能する際に有効になるいくつかのヘルパー関数が用意されています。これらの関数を使用すると、ユーザーが Discourse からログアウトすることなくグループメンバーシップを更新できます。これらの関数は、リチャードがリンクしたトピックに含まれています:https://meta.discourse.org/t/managing-discourse-group-membership-with-wp-discourse-sso/74724。
リチャードがリンクした投稿 では、2 つの異なるアプローチに関する詳細が説明されています。来週、これらの詳細を howto トピックに追加する予定です。現時点では、まずはその投稿を読んでおくことをお勧めします。
Solari
2020 年 8 月 15 日午後 10:43
35
ああ、なるほど、わかりました。私の混乱の一部は、Bring over permission level from WordPress MemberPress - #2 by simon というスレッドにあります。そのスレッドの下部に、この スレッドが解決策として示されていたため、混乱しました。
まだ私には難しすぎる内容ですが、この件に関するあなたの howto を楽しみにしています。
皆様のご協力に感謝します!
レイ
RGJ
(Richard - Communiteq)
2020 年 8 月 16 日午前 8:11
36
Solari:
ログオフするまで
では、ログオフさせましょう
以下のような処理で実現できるはずです:
$url = sprintf('https://%s/users/by-external/%d.json', $discourseHostname, $wpUserID);
$options = [
'headers' => [
'Api-Key' => $apiKey,
'Api-Username' => 'system'
]
];
$request = wp_remote_get($url, $options);
if (wp_remote_retrieve_response_code($request) != 200) {
return; // ユーザーが見つからない、処理を終了
}
$userData = json_decode(wp_remote_retrieve_body($request), true);
if (!isset($userData['user']['id'])) {
return false; // 不正なレスポンス、処理を終了
}
$discourseUserID = $userData['user']['id'];
$url = sprintf('https://%s/admin/users/%d/log_out', $discourseHostname, $discourseUserID);
$options = [
'headers' => [
'Api-Key' => $apiKey,
'Api-Username' => 'system'
]
];
$request = wp_remote_post($url, $options);
Dani1
2020 年 8 月 16 日午後 1:47
37
ユーザーに代わってログアウトさせることができます。単にユーザーになりすませばいいだけです。
実際、そのユーザーの詳細ページにアクセスするだけでログアウトさせることができます。
(もちろん、これはすべて手作業です。私は少数のメンバーしかおらず、皆が何をしているか正確に把握しています。リチャードの解決策はまだ試していませんが、存在していることは知っておいて良かったです!)
その際、ここにリンクを追加していただけませんか?ありがとうございます!
simon
2020 年 8 月 17 日午前 2:25
38
もちろん、トピックはこちらです:https://meta.discourse.org/t/managing-discourse-group-membership-with-wp-discourse-sso/74724。このトピックでは、WP Discourse の add_user_to_discourse_group および remove_user_from_discourse_group 関数の使用方法について説明しています。WordPress サイトが Discourse の SSO プロバイダーサイトとして設定されていると仮定すると、Discourse 上のグループメンバーシップを管理するには、これらの関数を使用する必要があります。
そのトピックで示されている例は PaidMembershipsPro プラグインを使用していますが、同様のアプローチは、よく作られた他の WordPress メンバーシッププラグインでも機能するはずです。
add_groups および remove_groups という SSO パラメータを使用してグループメンバーシップを管理する方法について、トピックにいくつかの詳細を追加する予定です。しかし、多くの場合、SSO ペイロードにこれらのパラメータを追加してグループメンバーシップを管理するのは最善の方法ではありません。なぜなら、グループメンバーシップが更新されるまで、ユーザーが Discourse からログアウトして再度ログインする必要があるからです。
近い将来、特定の WordPress メンバーシッププラグインと Discourse を連携させるための「そのまま使える」ソリューションが登場することを願っています。現在では、WordPress サイトに少量のカスタムコードを追加することでしか実現できません。もしこれが普段行っていない作業であれば、開発者を雇って支援してもらう必要があるかもしれません。
Solari
2020 年 8 月 17 日午後 9:35
39
詳細をありがとうございます。頭に入れておきます。
同意します。ユーザーのログアウトとログイン時にグループの追加・削除を行うよりも、その場で行う方が良いでしょう。
もし解決できない場合は、ここで開発者を雇って対応してもらい、コードを共有しようと思います。マーケットプレイスセクションでこれを実装した開発者が数名いると思います。
Ray