Verifica la password dell’utente in Meteor

Ci sono alcune azioni irreversibili che l’utente può fare nella mia app. Per aggiungere un livello di sicurezza, vorrei verificare che la persona che esegue tale azione sia effettivamente l’utente che ha effettuato l’accesso. Come posso ottenerlo?

  • Per gli utenti con password, vorrei un prompt che chiedesse di inserire nuovamente la password utente. Come posso verificare successivamente questa password, senza inviarla via cavo?

  • È ansible un’azione simile per gli utenti registrati tramite un servizio esterno? Se sì, come raggiungerlo?

Posso aiutare con la prima domanda. Al momento della stesura, Meteor non ha un metodo checkPassword , ma ecco come puoi farlo:

Sul client, assumerò che abbiate un modulo con un input chiamato password e un pulsante chiamato check-password . Il codice evento potrebbe essere simile a questo:

 Template.userAccount.events({ 'click #check-password': function() { var digest = Package.sha.SHA256($('#password').val()); Meteor.call('checkPassword', digest, function(err, result) { if (result) { console.log('the passwords match!'); } }); } }); 

Quindi sul server, possiamo implementare il metodo checkPassword modo:

 Meteor.methods({ checkPassword: function(digest) { check(digest, String); if (this.userId) { var user = Meteor.user(); var password = {digest: digest, algorithm: 'sha-256'}; var result = Accounts._checkPassword(user, password); return result.error == null; } else { return false; } } }); 

Per maggiori dettagli, vedi il mio post sul blog . Farò del mio meglio per tenerlo aggiornato.

Non l’ho mai fatto prima, ma penso che avrai bisogno di qualcosa del genere sul tuo server

     Accounts.registerLoginHandler (function (loginRequest) {
         console.log (loginRequest)
         var userId = null;
         var username = loginRequest.username;
         // NON SONO SICURO CHE LA PASSWORD DI METEOR SIA INCISA ...
         // Quindi è necessario fare un po 'di più ricerca su quel lato
         // MA DICIAMO DI AVERLI ORA
         var password = loginRequest.password;

         var user = Meteor.users.findOne ({
             $ e: [
                 {nome utente: nome utente},
                 {password: password} 
             ]
         });
         se (! utente) {
             // ERRORE
         } altro {
             // VERIFICATO
         }
     });

quindi puoi chiamare questa funzione dal lato client in questo modo:

     // FETCH THEERNINOME E PASSWORD SOMEHOW
     var loginRequest = {nome utente: nome utente, password: password};

     Accounts.callLoginMethod ({
         methodArguments: [loginRequest]
     });

Ho un progetto su Github per scopi diversi, ma puoi avere un’idea di come è strutturato: https://github.com/534N/apitest

Spero che questo ti aiuti,