2015-05-16 6 views
0

Итак, я проверяю пользователей в приложении Node с реляционными и паспортными данными. Я не мог найти информацию о том, что делает первый аргумент в местной стратегии паспорта. Является ли этот объект предоставлением схемы для пользователя для хранения в MySQL, откуда пришли usernameField и passwordField?Что это за аргумент объекта options в локальной стратегии PassportJS?

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

Нет, он предоставляет информацию о том, какие поля ввода в вашей форме на стороне клиента будут иметь значение атрибутов 'name'. Если это '' вы будете передавать '{usernameField: 'name'}' – laggingreflex

+0

Я понимаю это, но зачем использовать json для этого? Почему бы просто не запустить запрос 'INSERT'? –

+0

Я все равно запускаю запрос в скрытом теле обратного вызова, но зачем указывать 'usernameField'? Почему бы просто не запросить MySQL для учетных данных? –

ответ

0

В вас 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); 
    }); 


}; 

EDIT Как вы видите, я работаю с выражением, и мне нужен пользователь m Одел. это среднее приложение fullstack, которое работает с mongodb и mongoose. Во всяком случае, я думаю, Там вы можете быть в состоянии использовать MySQL (я настоятельно рекомендую вам прочитать об этих fullstack генераторов) https://github.com/DaftMonk/generator-angular-fullstack Если вы kickstarting приложения, считают изменить MySQL для MongoDB - expressjs-angularjs-nodejs

Надежда помогает !!

Смежные вопросы