【问题标题】:Sails passport js integration using sails as REST API使用 Sails 作为 REST API 的 Sails 护照 js 集成
【发布时间】:2015-09-16 04:50:50
【问题描述】:

我正在尝试在本地 mysql 数据库中使用护照 js 进行身份验证。我正在使用邮递员扩展来测试应用程序。 我正在发送两个字段,即用于身份验证的用户名和密码。当任一字段为空时,响应以 json 格式显示为

{
  "message": "Missing credentials",
  "user": false
}

但是当我为这两个字段传递值时,我得到 500 内部服务器错误。

错误:发送 500(“服务器错误”)响应: TypeError:无法读取未定义的属性“消息” 在 d:\Test\api\controllers\AuthController.js:25:23 在 Strategy.strategy.error (d:\Test\node_modules\passport\lib\middleware\authenticate.js:333:18) 在 Strategy.authenticate (d:\Test\node_modules\passport-local\lib\strategy.js:94:17) 尝试(d:\Test\node_modules\passport\lib\middleware\authenticate.js:341:16) 在验证(d:\Test\node_modules\passport\lib\middleware\authenticate.js:342:7) 在 Object.module.exports.login (d:\Test\api\controllers\AuthController.js:37:7) 在绑定处 (C:\Users*\AppData\Roaming\npm\node_modules\sails\node_modules\lodash\dist\lodash.js:729:21) 在 routeTargetFnWrapper (C:\Users*\AppData\Roaming\npm\node_modules\sails\lib\router\bind.js:179:5) 在回调(C:\Users*\AppData\Roaming\npm\node_modules\sails\node_modules\express\lib\router\index.js:164:37) 在参数处(C:\Users*\AppData\Roaming\npm\node_modules\sails\node_modules\express\lib\router\index.js:138:11) 通过时(C:\Users*\AppData\Roaming\npm\node_modules\sails\node_modules\express\lib\router\index.js:145:5) 在 nextRoute (C:\Users*\AppData\Roaming\npm\node_modules\sails\node_modules\express\lib\router\index.js:100:7) 在回调(C:\Users*\AppData\Roaming\npm\node_modules\sails\node_modules\express\lib\router\index.js:167:11) 在 C:\Users*\AppData\Roaming\npm\node_modules\sails\lib\router\bind.js:187:7 在 alwaysAllow (C:\Users*\AppData\Roaming\npm\node_modules\sails\lib\hooks\policies\index.js:207:11) 在 routeTargetFnWrapper (C:\Users*\AppData\Roaming\npm\node_modules\sails\lib\router\bind.js:179:5) [TypeError: Cannot read property 'message' of undefined]**

下面是我的 AuthController

var passport=require('passport');

  login:function(req,res){

    passport.authenticate('local', function(err, user, info) {

      if ((err) || (!user)) {

        return res.send({
          message:info.message,
          user: user
        });
      }
      req.logIn(user, function(err) {
        if (err) res.send(err);
        return res.send({
          message:"User Loged In",//info.message,
          user: user
        });
      });

    })(req, res);

  }
};

我正在使用以下模型进行测试

module.exports = {

  tableName: 'users',
  connection:'TestDB',
  autoCreatedAt:false,
  autoUpdatedAt:false,

  attributes: {
    username:{
        type:'string',
        required:true
      },
    password:{
      type:'string',
      required:true
    },
    toJSON: function() {
      var obj = this.toObject();
      delete obj.password;
      return obj;
    }
  }
};

包含用户名和密码的表还具有其他字段,例如国家/地区。有什么办法可以使用护照进行身份验证。

【问题讨论】:

  • 提供您的AuthController.js,以及与之相关的任何模型。或者直接用这个生成器sails-generate-auth,很简单。

标签: mysql node.js sails.js passport.js passport-local


【解决方案1】:

你做了这个link的第六步

module.exports.http = {
  middleware: {
    passportInit    : require('passport').initialize(),
    passportSession : require('passport').session(),

    order: [
      'startRequestTimer',
      'cookieParser',
      'session',
      'passportInit',
      'passportSession',
      'myRequestLogger',
      'bodyParser',
      'handleBodyParserError',
      'compress',
      'methodOverride',
      'poweredBy',
      'router',
      'www',
      'favicon',
      '404',
      '500'
    ],
  }
};

也许你想看看sails-hook-sanpassport,简单快捷

【讨论】:

    猜你喜欢
    • 2017-02-28
    • 1970-01-01
    • 2017-08-03
    • 1970-01-01
    • 1970-01-01
    • 2016-05-09
    • 2016-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多