2017-10-10 4 views
1

Je n'arrive pas à comprendre la relation entre Accounts.createUser() et Accounts.onCreateUser(). J'ai une API externe qui valide les informations de connexion des utilisateurs. Une fois que l'API m'a envoyé une réponse positive, j'ai besoin d'ajouter l'utilisateur dans MongoDB et de commencer sa session afin qu'il puisse être considéré comme un connecté utilisateur. Accounts.createUser() crée un utilisateur côté serveur, mais j'ai besoin de Accounts.onCreateUser() car j'ai besoin d'ajouter des champs personnalisés comme le jeton de l'utilisateur généré à partir de l'API externe.Ajouter un utilisateur manuellement sur le côté serveur et définir leur session

C'est le code que j'ai en ce moment (ce qui n'ajoute pas un utilisateur du tout):

code côté serveur:

var request = { 
'headers': { 
    'Content-Type': 'application/x-www-form-urlencoded' 
}, 
'params': user 
}; 

try { 

var response = HTTP.call('POST', url, request); //send call to the external api 
var token = response.data.token; 
//decode the token and add the user in the database 
var userInfo = Base64.decode(token.split('.')[1]); 

var options = { 
    email: user._username, 
    profile: { 
    name: user._username 
    }, 
    token: token 
}; 

var user = Accounts.onCreateUser(function(options, user) { 
    if (options.token) 
     user.token = options.token; 
    if (options.profile) 
     user.profile = options.profile; 
    return user; 
}); 

console.log(user); //this returns undefined 
return JSON.stringify({ 
    'code': 200, 
    'token': userInfo 
}); 
} catch (error) { 
    console.log(error); 
//console.log(error.response); 
var body = error.response.content; 
return body; 
} 

Répondre

1

D'accord. Donc j'ai finalement trouvé ce que je cherchais. La relation entre Accounts.createUser et Accounts.onCreateUser est que Accounts.onCreateUser est un hook et ajoute des fonctionnalités étendues à la fonction Accounts.createUser d'origine. Quelle est la fonctionnalité étendue? Il vous permet de créer des champs supplémentaires avant d'insérer votre utilisateur dans la base de données. Vous devez écrire ce crochet dans votre main.js (côté serveur) dans l'extrait de code de démarrage:

Meteor.startup(() => { 
Accounts.onCreateUser(function(options, user) { 
if (options.token) 
    user.token = options.token; 
if (options.profile) 
    user.profile = options.profile; 
return user; 
}); 
}) 

Et partout où vous voulez ajouter l'utilisateur, il suffit d'appeler Accounts.createUser() et ce crochet sera appelé automatiquement avant l'appel createUser