Quindi, sto autenticando gli utenti nel mio nodoapplicazione con relazionale e passportJS. Non sono riuscito a trovare informazioni su quale sia il primo argomento nella strategia locale del passaporto. È questo oggetto che fornisce uno schema per l'utente da memorizzare in MySQL, dove ha fatto usernameField
e passwordField
vieni?
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) {
//....
}
risposte:
0 per risposta № 1In te server/auth/index.js
, troverai le diverse mappature per le diverse strategie che desideri utilizzare.
Quindi, sarai in grado di controllare la strategia:
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"));
Quindi, in ./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;
Quindi, in ./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);
});
};
MODIFICARE Come vedi, io lavoro con express, e ho bisognoil modello utente. è un'app media a pieno formato che funziona con mongodb e mangusta. Comunque penso che sarai in grado di usare mysql (ti raccomando caldamente di leggere su quei generatori fullstack) https://github.com/DaftMonk/generator-angular-fullstack Se stai dando il via alla tua app, considera di cambiare mysql in mongodb - expressjs-angularjs-nodejs
Spero che sia d'aiuto !!