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, [email protected]
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&[email protected]&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`?
>
--
You received this message because you are subscribed to the Google Groups
"General Open edX discussion" group.
To view this discussion on the web visit
https://groups.google.com/d/msgid/edx-code/3b06f24c-7dde-40c3-8c60-c7f2b319795b%40googlegroups.com.