Отже, я перевіряю автентифікацію користувачів у моєму вузлізастосування з реляційними та паспортнимиЮЗ. Я не міг знайти інформацію про те, що робить перший аргумент локальної стратегії паспорта. Чи дає цей об'єкт схему для користувача, яка буде зберігатися в 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) {
//....
}
Відповіді:
0 для відповіді № 1У тобі 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);
});
};
РЕДАГУВАТИ Як бачите, я працюю з експресом, і я вимагаюМодель користувача. це середній додаток fullstack, який працює з mongodb і mongoose. У всякому разі, я думаю, ви будете мати можливість використовувати MySQL (я настійно рекомендую вам прочитати про ці повні генератори) https://github.com/DaftMonk/generator-angular-fullstack Якщо ви запускаєте програму, розглянути можливість змінити mysql на mongodb - expressjs-angularjs-nodejs
Сподіваюся, що це допомагає!