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ď č. 1Ja 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"
}
}
}