Accessing the `student_view_url` via API authentication or alternatives?

74 views
Skip to first unread message

neil.s...@dootrix.com

unread,
Aug 31, 2017, 9:06:05 AM8/31/17
to General Open edX discussion
I’m working on a React Native application where all the Edx course information needs to be displayed offline. 

I’ve authenticated the app using oauth2 endpoint (`client_id=…&grant_type=password&username=us...@example.com&password=p455w0rd` to `{{root}}/oauth2/access_token/`) and can access the API endpoints to get the users enrolled courses (`{{root}}/api/enrollment/v1/enrollment`) and the blocks within those courses (`{{root}}/api/courses/v1/blocks/?course_id={{course_id_url_friendly}}&depth=all&nav_depth=3&return_type=list&username={{username}}`). What I’m struggling to get is the contents of the HTML blocks.

I see in the official app (when viewing requests via a proxy) that it will request the actual webpage of the course, presumably the `student_view_url`. 

Is this the only way to get that content or is there an API endpoint I can use to return the content?

If the only way is to request the rendered `student_view_url`, how do I access that page? The only way I can tell in the official app is it looks like it’s passing the cookies to authenticate with the `studen_view_url`, which it must get when it authorises the user via the oauth2 endpoint. The cookies I get don’t work though, which I’ve tested in Postman (if I use cookies that I got from browsing my Edx site in Chrome, they do work). This begs me the question, is my authentication correct as I don’t get any scope returned when the official app returns a scope filled in with `read write` and two others.

A sample of what my authentication returns:

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

To reiterate;

1. Is there a way to request the HTML content via the API (so returned in a JSON request) rather than the `student_view_url`

2. If not then how do I authenticate to access the `student_view_url`?

neil.s...@dootrix.com

unread,
Sep 11, 2017, 11:48:40 AM9/11/17
to General Open edX discussion

So I worked out how to do point 2.


Before requesting any HTML content you need to hit the endpoint {{root}}/oauth2/login/ with the auth token that you provide to other endpoints. This will pass back a usable sessionid cookie that will let you access content that's not public (so long as the user has access).

As an aside, to pass the cookie through fetch() requests, I had to pass the option credentials: 'include'.


(I'm answering this on my stack exchange post as well - https://stackoverflow.com/questions/45978612/accessing-the-student-view-url-via-open-edx-api-authentication-or-alternatives/46159596#46159596)


On Thursday, August 31, 2017 at 2:06:05 PM UTC+1, neil.s...@dootrix.com wrote:
I’m working on a React Native application where all the Edx course information needs to be displayed offline. 

I’ve authenticated the app using oauth2 endpoint (`client_id=…&grant_type=password&username=user@example.com&password=p455w0rd` to `{{root}}/oauth2/access_token/`) and can access the API endpoints to get the users enrolled courses (`{{root}}/api/enrollment/v1/enrollment`) and the blocks within those courses (`{{root}}/api/courses/v1/blocks/?course_id={{course_id_url_friendly}}&depth=all&nav_depth=3&return_type=list&username={{username}}`). What I’m struggling to get is the contents of the HTML blocks.
Reply all
Reply to author
Forward
0 new messages