简体   繁体   English

使用 Moodle API & Node.js 在 Moodle 中创建用户

[英]Create User In Moodle Using Moodle API & Node.js

Trying to create a user in moodle but all I'm getting is <?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<EXCEPTION class=\"moodle_exception\">\n<ERRORCODE>invalidtoken</ERRORCODE>\n<MESSAGE>Invalid token - token not found</MESSAGE>\n</EXCEPTION>\n试图在moodle中创建一个用户,但我得到的只是<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<EXCEPTION class=\"moodle_exception\">\n<ERRORCODE>invalidtoken</ERRORCODE>\n<MESSAGE>Invalid token - token not found</MESSAGE>\n</EXCEPTION>\n

The token is absolutely correct because I'm getting it from /admin/settings.php?section=webservicetokens令牌是绝对正确的,因为我是从 /admin/settings.php?section=webservicetokens 获取的

This is the code I'm using这是我正在使用的代码

const axios = require('axios');

var token = 'XXXXXXXXXXXXXxx';
var functionname = 'core_user_create_users';

var userstocreate = [{
    username: 'bananaicecream',
    password: '1234',
    firstname: 'Banana',
    lastname: 'Republic',
    email: 'test@example.com',
    idnumber: 'AUTOGENERATEDID001',
    lang: 'en',
    description: 'If you die you die',
    country: 'us'
}];

export async function callMoodle() {
    return axios({
        url: `https://somedomainname.moodlecloud.com/webservice/rest/server.php`,
        method: 'post',
        data: {
            wstoken: token,
            wsfunction: functionname,
            moodlewsrestformat: 'json',
            users: userstocreate
        }
    })
    .then( (response) => {
        return {status: response.status, response: response.data};
    })
    .catch( (error) => {
        return {status: error.response.status, response: error.response.data};
    });
}

Any clue what I'm doing wrong?任何线索我做错了什么? because i have set up an external service called 'My Service' and assigned the appropriate functions for it as well因为我已经设置了一个名为“我的服务”的外部服务,并为其分配了适当的功能

在此处输入图像描述

Below is the functions下面是函数

在此处输入图像描述

I would recommend looking at testing your webservice call via something like postman.我建议通过 postman 之类的方式测试您的 Web 服务调用。 This will at least make sure that the parameters and webservice call is correct and indicate if the issue is with your nodejs code or the webservice call.这至少可以确保参数和 webservice 调用是正确的,并指出问题是你的 nodejs 代码还是 webservice 调用。

SOLVED - You need to send the data as form data已解决 - 您需要将数据作为表单数据发送

const axios = require('axios');
const FormData = require('form-data');

export async function callMoodle() {
    const formData = new FormData();
    await formData.append('moodlewsrestformat', 'json');
    await formData.append('wsfunction', 'core_user_create_users');
    await formData.append('wstoken', 'TOKEN_HERE');
    await formData.append('users[0][username]', 'bananaicecream');
    await formData.append('users[0][password]', 'xxxxxxxx');
    await formData.append('users[0][firstname]', 'Banana');
    await formData.append('users[0][lastname]', 'Republic');
    await formData.append('users[0][email]', 'user@example.com');
    await formData.append('users[0][idnumber]', 'AUTOGENERATEDID001');
    await formData.append('users[0][lang]', 'en');
    await formData.append('users[0][description]', 'If you die you die');

    return axios.post('https://somedomain.moodlecloud.com/webservice/rest/server.php', formData, {
        headers: formData.getHeaders()
    })
    .then( (response) => {
        let response_object = {status: response.status, response: response.data};
        return response_object;
    })
    .catch( (error) => {
        let response_object = {status: error.response.status, response: error.response.data};
        return response_object;
    });
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM