wordpress - 您无权查看此页面 : JWT Authentication for WP REST API with MemberPress plug in using WordPressPCL

标签 wordpress authentication jwt wordpress-rest-api memberpress

尝试使用 WordPressPCL API 对 WP REST API 使用 JWT 身份验证。

设法使用 WordPressPCL 对帖子和页面进行身份验证并将其发布到 WordPress 服务器。为了只允许付费成员(member)访问,我打算使用 MemberPress。我为帖子创建了一个特殊类别并按此发布。我在 MemberPress 中设置了一条规则,只允许订阅者访问。

测试了对帖子的访问,可以从我的浏览器中查看内容,一切正常。

问题是,当我尝试使用 WordPressPCL 执行相同操作时,尽管从 JWT/WordPress 角度来看我已获得适当授权,但我无权访问内容。看起来 MemberPress 阻止了通过 WordPressPCL 访问的授权用户,但允许通过网络浏览器访问。

当我尝试发布 页面 而不是 posts 时,也会发生同样的事情。我还应该提到,我可以下载所有帖子的元数据,但不能下载每篇帖子的内容,这会将我带到“您无权查看此页面”。

下面的代码检索具有特定标题和特定类别的所有帖子,但所有帖子的 myPosts.Content.Rendered == "You are authorized to view this page"

 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 规则限制了访问,但我找不到任何解决方案。非常感谢有关如何处理此问题(有或没有 MemberPress 参与)的一些指导。

最佳答案

改变这个

 var posts = await client.Posts.GetAll();

到:

var posts = await client.Posts.GetAll().Result;

如果你有 Result() 我认为这会起作用,下一个原始的;

var client = new WordPressClient("http://wordpress-domain.com/wp-json/");
client.AuthMethod = AuthMethod.JWT;
await client.RequestJWToken("user", "password");
return client;

但是你使用:

WordPressClient client = await GetClient(clientURL,userName,password);

关于wordpress - 您无权查看此页面 : JWT Authentication for WP REST API with MemberPress plug in using WordPressPCL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58234130/

相关文章:

css - 帖子的 Wordpress 类?

c# - 如何在 C# 中对 SMTP 进行身份验证

java - 通过改造 2 处理动态响应的正确方法

java - 如何获取jhipster jwt私钥?

javascript - 使用 Axios post 请求进行 JWT 授权

javascript - WOW.js 无法与 Wordpress 一起正常工作

mysql - WP 数据库中的 PRIMARY_KEY 重复

php - 尝试使用导入器重新上传图像,但它仍然检测到已删除的图像

php - Lumen 中的用户身份验证

python - Django 从 View 重定向到 root