通过Open Edx API身份验证或其他方式访问`student_view_url`?

时间:2017-08-31 09:59:42

标签: authentication cookies react-native openedx

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

我使用oauth2端点(client_id=…&grant_type=password&username=user@example.com&password=p455w0rd{{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

1 个答案:

答案 0 :(得分:1)

所以我找到了如何做第2点

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

另外,要通过fetch()次请求传递Cookie,我必须通过credentials: 'include'选项。