Я создаю маленький сервер gRPC.Я буду использовать его в качестве сервера аутентификации с базой данных.
Но, когда я получаю значение обратного вызова, я получаю "error": "2 UNKNOWN:
+ хорошее сообщение («неправильное имя пользователя» или «неправильный пароль»)
Здесь источник: proto
syntax = "proto3";
package auth;
service Auth {
rpc onLogin (LoginRequest) returns (LoginResponse);
}
// The request message containing the username and password.
message LoginRequest {
string username = 1;
string password = 2;
}
// The response message containing the JWT token.
message LoginResponse {
string error = 1;
}
grpc.js
const grpc = require("grpc");
var protoLoader = require('@grpc/proto-loader');
const authentication = require("./authentication")
var PROTO_PATH = __dirname + '/auth.proto';
var packageDefinition = protoLoader.loadSync(
PROTO_PATH,
{keepCase: true,
longs: String,
enums: String,
defaults: true,
oneofs: true
});
var authCredentials = grpc.loadPackageDefinition(packageDefinition).auth;
function onLogin(call, callback)
{
authentication.grpcLogin(call, callback);
}
module.exports.StartAuthServer = function() {
var server = new grpc.Server();
server.addService(authCredentials.Auth.service, {onLogin: onLogin});
server.bind('0.0.0.0:50051', grpc.ServerCredentials.createInsecure());
server.start();
}
authentication.js
module.exports.grpcLogin = function(call, callback){
db.query("select * from users where username = ?" , [call.request.username], function(error, rows){
if (error)
return callback({message: error});
if(!rows.length){
return callback({
message: "wrong username" //Error here
});
}
var dbpassword = rows[0].password;
if(sodium.password_check(dbpassword, call.request.password) === false){
return callback({
message: "wrong password" //and here
});
}
//console.log(rows[0]);
return callback({message: JSON.stringify(rows[0])}); //here too
});
};
При каждом обратном вызове (ошибки и результат dababase) я получаю одно и то же сообщение.Я не знаю почему.