Я пытаюсь повторить аутентификацию через веб-приложение WhatsApp QRCode для моего проекта "Последний год", который представляет собой интерактивную систему управления медицинскими услугами. В этой короткой истории системы врач должен иметь возможность просматривать рецепты пациентов, только если пациент позволяет ему, и это разрешение должно быть дано, когда он сканирует QR-код, сгенерированный профилем врачей, из своего приложения, которое отправляет authStatus на событие сокета что позволит серверу перенаправить на маршрут записи пациента.
Настройка сокета сервера выглядит следующим образом:
router.get('/patientinfoqrcode',redirectRoutes.redirectLoginDoctor,function(req,res){
let usernameQR = req.query.usernameQR
let message='';
io.on("connection",function(socket){
console.log("The user has been connected")
io.on("disconnect",function(){
console.log("The user has been disconnected")
})
socket.on("Auth",function(data){
if(data.authStatus=='authorized'){
res.redirect(`/dashboard?usernamePatient=${usernameQR}`)
}
});
})
res.render('doctor/patientinfoqrcode',{usernameQR})
});
Настройка приложения nativescript приведена ниже:
const socketio = SocketIO.connect('https://secret-falls-76814.herokuapp.com/patientinfoqrcode'
, options);
export function scanQR(args) {
barcodescanner.scan({
formats: "QR_CODE", // Pass in of you want to restrict scanning to certain type
message: "Use the volume buttons for extra light", // Android only, default is 'Place a barcode inside the viewfinder rectangle to scan it.'
showFlipCameraButton: true, // default false
preferFrontCamera: false, // default false
showTorchButton: true, // default false
beepOnScan: true, // Play or Suppress beep on scan (default true)
torchOn: false, // launch with the flashlight on (default false)
closeCallback: function () { console.log("Scanner closed"); }, // invoked when the scanner was closed (success or abort)
resultDisplayDuration: 500, // Android only, default 1500 (ms), set to 0 to disable echoing the scanned text
orientation: "landscape", // Android only, optionally lock the orientation to either "portrait" or "landscape"
openSettingsIfPermissionWasPreviouslyDenied: true // On iOS you can send the user to the settings app if access was previously denied
}).then(
function(result) {
console.log("Scan format: " + result.format);
console.log("Scan text: " + result.text);
const button = args.object;
button.text = result.text;
socketio.emit('Auth',{
authStatus:'authorized'
});
},
function(error) {
console.log("No scan: " + error);
}
);
}
И он не работает так, как должен. Я думаю, что единственная проблема заключается в том, что socket.io, слушающий событие, находится внутри маршрута / PatientInfoQrcode, и этот маршрут выполняет все функции внутри него в момент загрузки. Тогда даже если что-то случится в теле router.get (), ничего не произойдет, потому что он уже обработал документ. На сервере весь проект загружен на героку