Mysql PassportJS本地策略中的options对象参数用于什么?

Mysql PassportJS本地策略中的options对象参数用于什么?,mysql,node.js,passport.js,Mysql,Node.js,Passport.js,因此,我正在使用关系和passportJS对节点应用程序中的用户进行身份验证。我找不到关于passport本地策略中第一个参数的作用的信息。这个对象是否为存储在MySQL中的用户提供了一个模式,usernameField和passwordField来自哪里 passport.use('local-signup', new localStrategy({ //provide a schema? usernameField: 'username',

因此,我正在使用关系和passportJS对节点应用程序中的用户进行身份验证。我找不到关于passport本地策略中第一个参数的作用的信息。这个对象是否为存储在MySQL中的用户提供了一个模式,
usernameField
passwordField
来自哪里

    passport.use('local-signup', new localStrategy({
        //provide a schema?
        usernameField: 'username',
        passwordField: 'password',
        //pass back the entire request to the callback
        passReqToCallback: true
    },
    //passport.authenticate() passes in the parsed out password and username
    function (req, username, password, done) {
    //....
    }

在您的
server/auth/index.js
中,您将找到您想要使用的不同策略的不同映射

然后,您将能够检查策略:

var express = require('express');
var passport = require('passport');
var config = require('../config/environment');
var User = require('../api/user/user.model');

// Passport Configuration
require('./login/passport').setup(User, config);

var router = express.Router();
router.use('/local', require('./local/index'));
然后,在
/local/index.js

var passport = require('passport');
var auth = require('../auth.service.js');

var router = express.Router();

router.post('/', function(req, res, next) {

  console.log.req;

  passport.authenticate('local', function (err, user, info) {
    var error = err || info;
    if (error) return res.json(401, "THAT´S BAD");
    if (!user) return res.json(404, {message: 'Something went wrong, please try again.'});
    var token = auth.signToken(user._id, user.role);
    res.json({token: token, user:user});
  })(req, res, next)
});

module.exports = router;
然后,在./local/passport.js中

var passport = require('passport');
var Local = require('passport-local').Strategy;

exports.setup = function (User, config) {
  passport.use("local", new Local({
      usernameField: 'apikey',
      passwordField: 'apisecret'
    },

    function(apikey, apisecret, done) {
//THIS FUNCTION IS THE ONE YOU HAVE TO CHANGE TO YOUR MYSQL CODE TO CHECK WHETHER THE USER IS REGISTERED
      User.findOne({
        apikey: apikey,
        apisecret: apisecret
      }, function(err, user) {
        if (!user) {
          return done("YOUR API KEY HAS NOT AUTHORIZATION", false, { message: 'This email is not registered.' });
        }
        return done(null, user);
      });
    }
  ));

  passport.serializeUser(function(user, done) {
    done("USER", user);
  });

  passport.deserializeUser(function(user, done) {
    done(null, user);
  });


};
编辑如您所见,我使用express,需要用户模型。这是一款与mongodb和mongoose一起运行的普通fullstack应用程序。无论如何,我认为您将能够使用mysql(我强烈建议您阅读有关fullstack生成器的内容) 如果您正在启动应用程序,请考虑将MySQL更改为MangGDB——ExpjJS ANGAROJS NoDEJS


希望能有帮助

不,它提供了有关客户端表单中的输入字段将具有其
name
属性值的信息。如果它是
,您将通过
{usernameField:'name'}
我理解,但为什么要使用json呢?为什么不直接运行
INSERT
查询呢?我还是在回调的隐藏体中运行查询,但是为什么要指定
usernameField
?为什么不直接向MySQL查询凭证呢?MySQL在这里甚至都没有出现。这里的目的是告诉passport哪个字段将包含用户名/密码。假设您的HTML表单中有一个非常非常规的
字段,那么passport怎么知道这个“thisismyusername”字段有用户名呢?passport将解析后的用户名和密码作为参数传递给策略回调。为什么我必须在前面的对象中指定键值对?我真的想不起来了。