Forums | Mahara Community
Developers
/
Problems Oauth
18 April 2019, 5:29
Hello everyone
I am trying to consume a mahara web service for getting a portfolio access with my LMS user authenticated. In Mahara wiki i found this code and I always get the same error : "IfaultCode 0 faultString A nonrecoverable error occurred. This probably means you have encountered a bug in the system". Why? What I am doing wrong?
Best Regards.
See bellow please.
(I had to remove the "https" from URLs)
$options = array(
'consumer_key' => 'my_key',
'consumer_secret' => 'my_secret',
'server_uri' => 'mahara.local/webservice/rest/server.php',
'request_token_uri' => 'mahara.local/webservice/oauthv1.php/request_token',
'authorize_uri' => 'mahara.local/webservice/oauthv1.php/authorize',
'access_token_uri' => 'mahara.local/webservice/oauthv1.php/access_token',);
$store = OAuthStore::instance("Session", $options);
try {
// STEP 1: If we do not have an OAuth token yet, go get one
if (empty($_GET["oauth_token"]))
{
$getAuthTokenParams = array(
'xoauth_displayname' => 'Oauth test',
'oauth_callback' => 'lms.local'
);
$tokenResultParams = OAuthRequester::requestRequestToken($options['consumer_key'], 0, $getAuthTokenParams);
// In $tokenResultParams['token'] I get a token
// but in the next instruction I get the error message
header("Location: " . $options['authorize_uri'] . "?oauth_token=" . $tokenResultParams['token']);
}
else {
$oauthToken = $_GET["oauth_token"];
$tokenResultParams = $_GET;
try {
OAuthRequester::requestAccessToken($options['consumer_key'], $oauthToken, 0, 'POST', $_GET);
}
catch (OAuthException2 $e) {
var_dump($e);
return;
}
$secrets = $store->getSecretsForSignature($options["server_uri"], 1);
$body = '{"wsfunction":"mahara_user_get_users_by_id","users":[{"id":1}]}';
$request = new OAuthRequester($options['server_uri'].'?alt=json', 'POST', array(), $body);
$result = $request->doRequest(0);
if ($result['code'] == 200) {
var_dump($result['body']);
}
else {
echo 'Error';
}
}
}
catch(OAuthException2 $e) {
echo "OAuthException: " . $e->getMessage();
}
23 April 2019, 21:04
Hi Yolanda,
What LMS do you want to connect to Mahara? We have instructions for setting up the connection for Moodle, Canvas, and Blackboard. See the user manual for more information. If you are using a different LMS, I'd be happy to check things out with you to add that LMS to our documentation. If your LMS supports LTI, you shouldn't have to set up web services for the authentication manually, but can use LTI.
Cheers
Kristina
25 April 2019, 3:24
I'm programming this for a very small LMS we use in our institution. We programming a platform using Symfony 2.7.
I am using OAuth library. So i need to do the LTI connection without any third party plugin.
The consumer i get can not change the request token for an access token. Then mahara throws this Exception: "IfaultCode 0 faultString A nonrecoverable error occurred. This probably means you have encountered a bug in the syste"
Thank you.
25 April 2019, 9:17
Hello Again:
I've been reviewed my source code and making some test. I need to login via LTI and then Mahara, so my LMS users must access to the portfolio directly. When I made this request:
<my-mahara-server>/webservice/oauthv1.php/authorize?oauth_token=f5dd4636ce6e38bb4636d10aacb8330005cc08eb5&oauth_callback=http%3A%2F%2Flocalhost%3A5804%2Fretorno.php%3Fconsumer_key%3De05ede9689c976cb8280e62da4030fea05cb74695%26usr_id%3D8
I get two errors:
- If there is a logged user, the error is: faultCode 0 faultString A nonrecoverable error occurred. This probably means you have encountered a bug in the system
- If there is not a logged user, the error is: [WAR] d8 (lib\errors.php:535) [Error]: Call to a member function get() on unknown
Thanks for reading !
03 May 2019, 15:21
Hi Yolanda,
I suspect for the:
'server_uri'
'request_token_uri'
'authorize_uri'
'access_token_uri'
You will need to prefix them with http://
Or on the bit:
header("Location: " . $options['authorize_uri'] . " ...
you will need to go
header("Location: http://" . $options['authorize_uri'] . " ...
As I don't think PHP header location works without indicating the URL schema part
Cheers
Robert