2017-03-27 3 views
0

Ich verwende NodeJS und sequelize. Ich habe zwei Arten von Login in meiner Anwendung. Eine ist eine normale Benutzeranmeldung und eine ist die Firmenanmeldung.Sequelize bessere Art, diesen Code zu schreiben

Der folgende Code sucht zuerst nach dem Token in der Firmentabelle, wenn es nicht existiert, wird es in die Benutzertabelle verschoben, um es zu finden.

Auf diese Weise weiß ich, wer sich im System angemeldet hat.

Gibt es einen besseren Weg, es zu tun?

ODER

Gibt es eine Möglichkeit, wo ich gleichzeitig in zwei Tabellen suchen, anstatt sequelize zum Warten in einer Tabelle zu suchen, und dann tun die andere?

var token = req.get('Auth') || ''; 
db.token.findOne({ 
    where:{ 
     tokenHash: cryptojs.MD5(token).toString() 
    } 
}).then(function(tokenInstance){ 
    if(!tokenInstance){ 
     throw new Error(); 
    } 
    req.token = tokenInstance; 
    return db.company_auth.findByToken(token); //looks in the first table (company) 
}).then(function(entity){ 
    if(entity === null){ 
     return db.user.findByToken(token); //if not found (then looks in the second table - user) 
    }else{ 
     req.entity = entity; 
     next(); 
    } 
}).then(function(user){ 
    req.user = user; 
    next(); 
}).catch(function(e){ 
    console.log(e); 
    res.status(401).send(); 
}); 

TIA!

+0

ja können Sie .... es ist – Beginner

+0

Ihr Code ruft derzeit 'next()' zweimal. Ich denke nicht, dass das beabsichtigt ist? – Bergi

+0

@Bergi das ist eigentlich beabsichtigt, denn wenn Token in der Unternehmenstabelle gefunden wird, wird es einfach weitermachen, um andere Sachen zu tun und nicht in der Benutzertabelle zu suchen. –

Antwort

2

Ja, Sie leicht in beiden Tabellen auf einmal und warten für beide Ergebnisse mit Promise.all suchen:

db.token.findOne({ 
    where:{ 
     tokenHash: cryptojs.MD5(req.get('Auth') || '').toString() 
    } 
}).then(function(tokenInstance){ 
    if (!tokenInstance) 
     throw new Error("found no token"); 

    req.token = tokenInstance; 
    return Promise.all([ 
     db.company_auth.findByToken(token), //looks in the first table (company) 
     db.user.findByToken(token) // also looks in the second table - user) 
    ]); 
}).then(function([entity, user]){ 
    if (entity === null){ 
     req.user = user; 
    } else { 
     req.entity = entity; 
     next(); 
     req.user = undefined; 
    } 
    next(); 
}).catch(function(e){ 
    console.log(e); 
    res.status(401).send(); 
}); 
+0

Danke für die Antwort. Ich habe dich verstanden. Das hilft sehr –

Verwandte Themen