试图让Waterlock不要在登录时创建新用户. 当我将createOnNotFound设置为false并尝试使用http:// localhost:1337 / auth / register?email=a@s.d\u0026amp; password = 12345678注册新用户时.我有500错误: error:
当我将createOnNotFound设置为false并尝试使用http:// localhost:1337 / auth / register?email=a@s.d\u0026amp; password = 12345678注册新用户时.我有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]
The register module,错误发生的地方是waterlock库的一部分.
这里是寄存器模块的代码,现在是:
'use strict'; /** * login action * * tries 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'); } };
Sails v 0.11,Waterlock v 0.1.0
我现在如何注册用户?
更新:
这是因为在我用于身份验证的waterlock-local-auth
模块中尚未实现寄存器操作.有关详细信息,请参见this PR.
所以更新的问题是:如何解决这个问题,直到实施完成为止?
我在/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); }); }); } });
这是我需要的.
同时Wayne-o,Waterlock贡献者之一,said他将在waterlock-local-auth完成他的implementation of registration.