/ / Loopback NodeJS - Sprawdź rolę użytkownika podczas logowania - node.js, rest, http, loopback, apiconnect

Loopback NodeJS - Sprawdź rolę użytkownika przy logowaniu - node.js, rest, http, loopback, apiconnect

Mam aplikację używającą Angular 5 dlafront-end, NodeJS dla zaplecza i używam z nim pętli zwrotnej do tworzenia interfejsów API. Mam zdalną metodę, której używam do logowania użytkownika, to działa. Teraz chciałem zmienić tę metodę, aby sprawdzić, czy użytkownik jest administratorem, ale nie mogę tego zrobić. Z jakiegoś powodu, kiedy wykonuję wywołanie API do modelu RoleMappings, używając / api / RoleMappings? Filter = {gdzie: {"principalId": ID_VALUE} to nie działa. Wartość ID_VALUE jest również id_użytkownika administratora, ponieważ ta rola i admin są tworzone programowo, więc wiem, że powinno to być userId.

Składam wniosek o sprawdzenie roli jakozagnieżdżone żądanie, najpierw sprawdzam, czy użytkownik jest zalogowany (jeśli użytkownik nawet się nie loguje, nie ma sensu sprawdzać, czy jest administratorem), a następnie sprawdzam, czy ten użytkownik jest administratorem. To jest kod, każda pomoc byłaby doceniana.

Przetestowałem wywołanie interfejsu API przy użyciu połączenia IBM API i zadziałało, po prostu nie chce pracować z mojego kodu. To żądanie nie powoduje błędu, ale odpowiedź zawiera kod 400, a treść jest pusta.

DB, w którym przechowywane są rolemappings, to 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);

});

Odpowiedzi:

0 dla odpowiedzi № 1

Podwójnie sprawdzę, czy RoleMapping model jest publicznie eksponowany w model-config.json, które byłyby wymagane do wysłania żądania GET.

Otrzymałem podobne zapytanie w kodzie modelu, które wygląda tak:

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

Biorąc pod uwagę, że ciąg filtru wygląda tak:

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

„Spodziewałbym się, że będzie działać w oparciu o moje doświadczenie userId nie jest poprawne, możesz spróbować porzucić cytaty z eskapą, aby wyglądać tak:

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