1

我正在开发一个 React Native 应用程序,其中所有 Edx 课程信息都需要离线显示。

我已经使用 oauth2 端点 ( client_id=…&grant_type=password&username=user@example.com&password=p455w0rdto {{root}}/oauth2/access_token/) 对应用程序进行了身份验证,并且可以访问 API 端点以获取用户注册的课程 ( {{root}}/api/enrollment/v1/enrollment) 和这些课程中的块 ( {{root}}/api/courses/v1/blocks/?course_id={{course_id_url_friendly}}&depth=all&nav_depth=3&return_type=list&username={{username}})。我正在努力获得的是 HTML 块的内容。

我在官方应用程序中看到(通过代理查看请求时)它将请求课程的实际网页,大概是student_view_url.

这是获取该内容的唯一方法,还是我可以使用 API 端点返回内容?

如果唯一的方法是请求渲染student_view_url,我如何访问该页面?我可以在官方应用程序中判断的唯一方法是,它看起来像是通过 cookie 进行身份验证,studen_view_url当它通过 oauth2 端点授权用户时必须得到它。我得到的 cookie 不起作用,我在 Postman 中测试过(如果我使用在 Chrome 中浏览我的 Edx 网站时获得的 cookie,它们确实有效)。这向我提出了一个问题,我的身份验证是否正确,因为当官方应用程序返回一个填充的范围和另外两个范围时,我没有返回任何范围read write

我的身份验证返回的示例:

{ "access_token": "a12345...", "token_type": "Bearer", "expires_in": 2591999, "scope": "" }

重申;

  1. 有没有办法通过 API 请求 HTML 内容(在 JSON 请求中返回)而不是student_view_url

  2. 如果没有,那么我如何进行身份验证以访问student_view_url

4

1 回答 1

1

所以我想出了如何做第 2 点

在请求任何 HTML 内容之前,您需要{{root}}/oauth2/login/使用您提供给其他端点的身份验证令牌来访问端点。这将传回一个可用的sessionidcookie,让您可以访问不公开的内容(只要用户有权访问)。

顺便说一句,要通过fetch()请求传递 cookie,我必须传递 option credentials: 'include'

于 2017-09-11T15:47:33.307 回答