Sails.js Waterlock / auth / register provoque l’erreur 500

En essayant de faire en sorte que Waterlock ne crée pas de nouvel utilisateur lors de la connexion.

Lorsque je createOnNotFound à false et que j’essaie d’utiliser http://localhost:1337/auth/register?email=a@sd&password=12345678 pour enregistrer un nouvel utilisateur. J’ai une erreur de 500 :

 error: Sending 500 ("Server Error") response: TypeError: undefined is not a function at Object.module.exports (D:\temp\sails-waterlock\node_modules\waterlock\lib\controllers\actions\register.js:25:44) at bound (C:\Users\sandres\AppData\Roaming\npm\node_modules\sails\node_modules\lodash\dist\lodash.js:729:21) at routeTargetFnWrapper (C:\Users\sandres\AppData\Roaming\npm\node_modules\sails\lib\router\bind.js:179:5) at callbacks (C:\Users\sandres\AppData\Roaming\npm\node_modules\sails\node_modules\express\lib\router\index.js:164:37) at param (C:\Users\sandres\AppData\Roaming\npm\node_modules\sails\node_modules\express\lib\router\index.js:138:11) at param (C:\Users\sandres\AppData\Roaming\npm\node_modules\sails\node_modules\express\lib\router\index.js:135:11) at pass (C:\Users\sandres\AppData\Roaming\npm\node_modules\sails\node_modules\express\lib\router\index.js:145:5) at nextRoute (C:\Users\sandres\AppData\Roaming\npm\node_modules\sails\node_modules\express\lib\router\index.js:100:7) at callbacks (C:\Users\sandres\AppData\Roaming\npm\node_modules\sails\node_modules\express\lib\router\index.js:167:11) at C:\Users\sandres\AppData\Roaming\npm\node_modules\sails\lib\router\bind.js:187:7 at alwaysAllow (C:\Users\sandres\AppData\Roaming\npm\node_modules\sails\lib\hooks\policies\index.js:207:11) at routeTargetFnWrapper (C:\Users\sandres\AppData\Roaming\npm\node_modules\sails\lib\router\bind.js:179:5) at callbacks (C:\Users\sandres\AppData\Roaming\npm\node_modules\sails\node_modules\express\lib\router\index.js:164:37) at param (C:\Users\sandres\AppData\Roaming\npm\node_modules\sails\node_modules\express\lib\router\index.js:138:11) at param (C:\Users\sandres\AppData\Roaming\npm\node_modules\sails\node_modules\express\lib\router\index.js:135:11) at pass (C:\Users\sandres\AppData\Roaming\npm\node_modules\sails\node_modules\express\lib\router\index.js:145:5) [TypeError: undefined is not a function] 

Le module de registre , où l’erreur se produit, fait partie de la bibliothèque waterlock .

Voici le code du module de registre tel qu’il est maintenant:

 'use ssortingct'; /** * login action * * sortinges to find if we have an auth method to handle this type of login * request. * * GET /auth/login */ module.exports = function(req, res){ var params = waterlock._utils.allParams(req); // If there is only 1 chosen auth method just assume it if(waterlock._utils.countTopLevel(waterlock.methods) === 1){ params.type = waterlock._utils.accessObjectLikeArray(0, waterlock.methods).authType; } if(typeof params.type === 'undefined'){ return res.badRequest('You must specify a type parameter.'); } if(waterlock.methods.hasOwnProperty(params.type)){ // call the login function of the correct auth type waterlock.methods[params.type].actions.register(req, res); }else{ return res.badRequest('unknown/invalid authentication type'); } }; 

Voiles v 0.11, Waterlock v 0.1.0

Comment puis-je enregistrer un utilisateur maintenant?

METTRE À JOUR:

Cela se produit car l’action d’enregistrement n’est pas encore implémentée dans le module waterlock-local-auth que j’utilise pour l’authentification. Voir ce PR pour plus de détails.

La question mise à jour est donc la suivante: comment résoudre ce problème jusqu’à ce que la mise en œuvre soit terminée?

J’ai résolu ce problème avec une action d’enregistrement personnalisée dans /controllers/AuthController.js :

 module.exports = require('waterlock').waterlocked({ register: function(req, res) { var params = req.params.all(), def = waterlock.Auth.definition, criteria = { }, scopeKey = def.email !== undefined ? 'email' : 'username'; var attr = { password: params.password } attr[scopeKey] = params[scopeKey]; criteria[scopeKey] = attr[scopeKey]; waterlock.engine.findAuth(criteria, function(err, user) { if (user) return res.badRequest("User already exists"); else waterlock.engine.findOrCreateAuth(criteria, attr, function(err, user) { if (err) return res.badRequest(err); delete user.password; return res.ok(user); }); }); } }); 

C’est exactement ce dont j’ai besoin.

Pendant ce temps, Wayne-o , l’un des consortingbuteurs de Waterlock, a déclaré qu’il terminerait la mise en œuvre de son enregistrement dans waterlock-local-auth .