Я использую passport and flash для управления аутентификацией. Я хочу отправить флэш-сообщения обратно в пользовательский интерфейс в документации. В моем случае в пользовательском интерфейсе я использую модальность так делаетОтправка данных в модальный без перенаправления в nodejs
res.render('login.ejs', { message: req.flash('loginMessage') });
не будет работать, потому что вы можете сделать только на обновление страницы. Поэтому, как я могу отправить данные флэш-памяти любому другому виду данных на мою страницу, когда по какой-то причине не удается войти в систему. Независимо от данных флэш-памяти, в частности, я не могу понять, как визуализировать данные модальным с помощью выражения.
routes.js
ниже res.render никогда не происходит на неудачной аутентификации.
//Home Page ===================================
app.get('/', function(req, res) {
res.render('login.ejs', { message: req.flash('loginMessage') });
});
//Login Modal =================================
app.post('/login', passport.authenticate('local-login', {
successRedirect : '/profile',
failureFlash : true
}));
index.ejs (где мой модальное)
<div id="openModal" class="modalDialog">
<div>
<a href="#close" title="Close" class="close">X</a>
<h2 id="logintitle">Log In</h2>
<% if (message.length>0) { %>
<div class="alert alert-danger">
<%= message %>
</div>
<% } %>
<form class="form-horizontal" action="/login" method="post" id="loginform">
<div class="form-group inner-addon left-addon">
<label class="sr-only" for="login_email">Email</label>
<i class="glyphicon glyphicon-user"></i>
<input type="email" class="form-control" name="email" placeholder="Email Address" />
</div>
<div class="form-group inner-addon left-addon">
<label class="sr-only" for="login_pass">Password</label>
<i class="glyphicon glyphicon-star-empty"></i>
<input type="password" class="form-control" name="password" placeholder="Password" />
</div>
<div id="forgotpass">
<a href="#openModal3" id="forgotpass">Forgot Password?</a>
</div>
<div class="form-group">
<button type="submit" class="btn form-login-button">Log In</button>
</div>
</form>
<div class="strike">
<span>Log in with</span>
</div>
<div id="test" class="test">
<a href="/auth/facebook" class="btn btn-primary"><span class="fa fa-facebook"></span> Facebook</a>
<a href="/auth/google" class="btn btn-danger"><span class="fa fa-google-plus"></span> Google</a>
</div>
</div>
</div>
Я понимаю, мне нужно использовать JavaScript/Ajax для предотвращения пост за то перенаправлять, но Я не могу понять, как получить данные вспышки до этого момента:
index.ejs (JavaScript)
$(function() {
$("#loginform").on("submit", function(e) {
e.preventDefault();
$.ajax({
url: $(this).attr("action"),
type: 'POST',
data: $(this).serialize(),
beforeSend: function() {
},
success: function (data) {
}
});
});
});
EDIT добавил код из passport.js
function passport_login(req, email, password, done) {
//doing some validate and found bad password
return done(null, false, req.flash('loginMessage', 'Invalid Password'));
})
Мне это действительно нужно! Я выполнял ваши ответы до каждого кода, но в этой части: '$ .get ('/ login', data, function (result) {', I got "Uncaught TypeError: $ .get не является функцией", когда Я пытаюсь войти. В javascript должно быть что-то, что я сделал не так, но я не знаю. Знаете ли вы, что мне не хватает? – shihandrana