/ / Loopback NodeJS - Skontrolujte užívateľskú rolu pri prihlásení - node.js, rest, http, loopback, apiconnect

Loopback NodeJS - Kontrola rolí používateľa pri prihlasovaní - node.js, rest, http, loopback, apiconnect

Mám žiadosť pomocou Angular 5 prefront-end, NodeJS pre back-end a ja s ním využívam loopback na vytváranie API. Mám vzdialenú metódu, ktorú používam na prihlásenie používateľa, toto funguje. Teraz som chcel zmeniť túto metódu a skontrolovať, či je používateľ správcom, nemôžem to však urobiť. Z nejakého dôvodu, keď volám API na model RoleMappings, nefunguje to pomocou / api / RoleMappings? Filter = {where: {"principalId": ID_VALUE}. ID_VALUE je tiež user_id administrátora, pretože táto rola a admin sú vytvárané programovo, takže viem, že ak je mainId userId.

Žiadam o kontrolu úlohy akovnorenú požiadavku, najprv skontrolujem, či je používateľ prihlásený (ak sa ani neprihlási, nemá zmysel kontrolovať, či je správcom), potom skontrolujem, či je tento používateľ správcom. Toto je kód, bola by ocenená akákoľvek pomoc.

Testovanie volania API som testoval pomocou pripojenia IBM API connect a fungovalo to, jednoducho nechce pracovať z môjho kódu. Táto požiadavka nevrhá chybu, ale odpoveď obsahuje kód 400 a telo je prázdne.

DB, v ktorej sú uložené rozšírenia, je CloudantDB

var options = {
method: "POST",
url: conf.endpoint + "api/Clients/login",
headers: this.headers,
body: user,
json: true
}

request(options, function (error, response, body) {
if (error) return callback(error);

//
var adminOptions = {
method: "GET",
url: conf.endpoint + "/api/RoleMappings",
qs: {filter: {"where":{"principalId": """+body.userId""","roleId":"159882e4a5bdde9cc725eee8c13a1030"}}},
headers: this.headers
}

request(adminOptions, function(aReqErr, aRes, aBody){
if(aReqErr) return callback(aReqErr);

//console.log("Admin check success: ", aRes);
if(aBody){
var pId = aBody[0].principalId;
console.log("Admin check success:", aBody);
if(pId){
body["isAdmin"] = true;
}else{
body["isAdmin"] = false;
}
}else{

console.log("aResCode", aRes.statusCode);
console.log("aResMessage", aRes.statusMessage);
//console.log("aReqErr", aReqErr);
}

});

//console.log("Success: ", typeof body);

callback(null, body);

});

odpovede:

0 pre odpoveď č. 1

Ja by som dvakrát skontrolovať, že RoleMapping model je verejne vystavený v model-config.json, ktorá by bola povinná odoslať žiadosť GET.

Podobný dotaz som urobil v kóde modelu, ktorý vyzerá takto:

app.models.RoleMapping.find({
where: {
principalId: userId,
roleId: roleId
}
}, cb)

Vzhľadom na to, že reťazec vášho filtra vyzerá takto:

?filter={"where":{"principalId":<userId>,"roleId":<roleId>}}

Očakával by som, že to bude fungovať na základe mojich skúseností. Jedinou ďalšou vecou, ​​ktorú môžem napadnúť, je možno formátovanie internetu userId nie je správne, môžete skúsiť vynechať uviaznuté úvodzovky a vyzerať takto:

qs: {
filter: {
where: {
principalId: body.userId,
roleId: "159882e4a5bdde9cc725eee8c13a1030"
}
}
}