Express.js 4.0에서 Passport.js를 사용하려고하는데 아무 일도 일어나지 않습니다. 필자는 아래의 튜토리얼을 따라 Express.js 4.0의 새로운 라우팅 기능에 맞게 조정하려고합니다.Express.js로 Passport.js 로컬 인증 4
http://scotch.io/tutorials/javascript/easy-node-authentication-setup-and-local
지금까지 난 그냥 LocalStrategy에 명시된 바와 같이, 로그인하고 적절한 메시지와 함께 실패 리디렉션보기를 얻을하려고합니다.
1 .- 필요한 모듈을 당기기와 MongoDB를 데이터베이스에 연결 응용 프로그램 변수
...
var session = require('express-session');
var mongoose = require('mongoose');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var flash = require('connect-flash');
var bcrypt = require('bcrypt-nodejs');
var app = express();
2 .-를 만들고 :
이
은 미안은 app.js에 무엇을 저장 사용자에게 사용자 모델을 확인require('./models/db')(mongoose, 'mongodb://localhost/cms');
var User = require('./models/user')(mongoose);
0 4. 구성 여권
require('./config/passport')(passport, User, LocalStrategy);
5 .-
var router = express.Router();
router.use(function (req, res, next) {
if (req.method === 'POST' && req.url === '/login') {
// Log #1
console.log(passport);
passport.authenticate('login', {
successRedirect: '/',
failureRedirect: '/login',
failureFlash: true
});
} else {
next();
}
});
router.route('/')
.get(function (req, res) {
res.render('index');
});
router.route('/login')
.post(function (req, res) {
console.log('Post on /login');
})
.get(function (req, res) {
res.render('login', {
message: req.flash('loginMessage')
});
});
app.use('/', router);
... (Rest of app.js such as error handlers)
이 처리에 필요한 모든 미들웨어
app.engine('.html', require('ejs').__express);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'html');
app.use(favicon());
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded());
app.use(cookieParser());
app.use(session({
secret: 'keyboardcat'
}));
app.use(passport.initialize());
app.use(passport.session());
app.use(flash());
app.use(express.static(path.join(__dirname, 'public')));
6 .- 경로를 포함하는지 확인하기 ./config/pas에서 Passport 전략의 구성을 설정하는 방법입니다. 우리가 입력 이름이 제대로 전략처럼 설정되어 볼 수 있듯이보기 로그인이
과 같은
module.exports = function (passport, User, LocalStrategy) {
passport.serializeUser(function (user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function (err, user) {
done(err, user);
});
});
passport.use('login', new LocalStrategy({
usernameField : 'email',
passwordField : 'password',
passReqToCallback : true
}, function (email, password, done) {
User.findOne({ email: email }, function (err, user) {
if (err) {
return done(err);
}
if (!user) {
return done(null, false, { message: 'Incorrect username.' });
}
if (!user.validPassword(password)) {
return done(null, false, { message: 'Incorrect password.' });
}
return done(null, user);
});
}
));
};
을 sport.js. 어떤 사용자가 아직 내가 기대하지 않았다 놈의이 와 '/'로 리디렉션하기 때문에
<% include header.html %>
<% if (message.length > 0) { %>
<div><%= message %></div>
<% } %>
<form action="/login" method="post" enctype="multipart/form-data">
<input type="text" name="email"/>
<input type="password" name="password"/>
<input type="submit" value="Log In"/>
</form>
<% include footer.html %>
'올바른 사용자 명.' 양식을 제출할 때 메시지가 표시되지만 대신 브라우저가로드 상태로 유지되고 아무 일도 발생하지 않습니다. 이
passport.authenticate('login', {
successRedirect: '/',
failureRedirect: '/login',
failureFlash: true
});
를 호출 할 필요가 여기서
몇 가지 생각 ...
내가 부르고 있습니까? 여기서 내가 원하는 것은 로그인 경로에 POST 할 때 미들웨어로 호출하는 것입니다.
로그 # 1은 실제로 여권 개체를 보여줍니다.
나는 이것으로 며칠을 보내고 어떤 일이 일어나고 있는지 파악할 수 없다. 누군가가 뭔가를 발견 할 수 있기를 바랍니다. 감사합니다.
안녕하세요, 첫 번째 옵션은 정상적으로 작동하는 옵션입니다. 이제 '/ login'으로 리디렉션됩니다. 이제는 올바른 오류 메시지를 출력하는 데 어려움을 겪고 있습니다. 그러나 그것은 제가 추측 한 또 다른 질문입니다. 감사합니다. –