gpt4 book ai didi

mysql - PassportJS 本地策略中的这个选项对象参数有什么用?

转载 作者:行者123 更新时间:2023-11-29 22:25:47 27 4
gpt4 key购买 nike

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

    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 一起运行。无论如何,我认为你将能够使用 mysql(我强烈建议你阅读那些全栈生成器)https://github.com/DaftMonk/generator-angular-fullstack如果您要启动应用程序,请考虑将 mysql 更改为 mongodb--expressjs-angularjs-nodejs

希望对你有帮助!!

关于mysql - PassportJS 本地策略中的这个选项对象参数有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30280952/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com