尝试使用 WordPressPCL API 对 WP REST API 使用 JWT 身份验证。
管理使用 WordPressPCL 对帖子和页面进行身份验证并将其发布到 WordPress 服务器。为了限制只有付费会员才能访问,我打算使用 MemberPress。我为该帖子创建了一个特殊类别并按原样发布。我在 MemberPress 中设置了一个规则,只允许订阅者访问。
测试了对帖子的访问,可以从我的浏览器中看到内容,一切都很好。
问题是,当我尝试使用 WordPressPCL 执行相同操作时,尽管我从 JWT/WordPress 角度获得了适当的授权,但我无权访问内容。看起来 MemberPress 阻止了通过 WordPressPCL 访问的授权用户,但在通过 Web 浏览器访问时允许访问。
当我尝试发布pages而不是posts时,也会发生同样的事情。我还应该提到,我可以下载所有帖子的元数据,但不能下载每个帖子的内容,这会将我带到“您未经授权查看此页面”。
下面的代码检索具有特定标题和特定类别的所有帖子,但所有帖子的myPosts.Content.Rendered ==“您无权查看此页面”。
try
{
WordPressClient client = await GetClient(clientURL,userName,password);
if (await client.IsValidJWToken())
{
var posts = await client.Posts.GetAll();
var myPosts = posts.Where(p => p.Categories[0] == category && p.Title.Rendered == title);
}
...
我在没有 JWT 的情况下尝试了类似的事情。我可以进行身份验证但无法检索页面内容:
CookieContainer cc = new CookieContainer();
var request = (HttpWebRequest)WebRequest.Create(loginUri);
request.Proxy = null;
request.AllowAutoRedirect = false;
request.CookieContainer = cc;
request.Method = "post";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = requestData.Length;
using (Stream s = request.GetRequestStream())
s.Write(requestData, 0, requestData.Length);
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
foreach (Cookie c in response.Cookies)
Console.WriteLine(c.Name + " = " + c.Value);
}
string newloginUri = "http://localhost/myWP/myPostforToday/";
HttpWebRequest newrequest = (HttpWebRequest)WebRequest.Create(newloginUri);
newrequest.Proxy = null;
newrequest.CookieContainer = cc;
using (HttpWebResponse newresponse = (HttpWebResponse)newrequest.GetResponse())
using (Stream resSteam = newresponse.GetResponseStream())
using (StreamReader sr = new StreamReader(resSteam))
File.WriteAllText(@"retrievedpage.html", sr.ReadToEnd());
我怀疑 MemeberPress 规则限制了访问,但我找不到任何解决方案。非常感谢有关如何处理此问题的一些指导(无论有无会员新闻参与)。