2015-09-22 14 views
13

私は新しいSails.jsプロジェクトを持っており、Passport.jsを使用してユーザーを認証しています。私は基本的な認証が働いています(ユーザーがサインアップして正常にログインできることを意味します)が、正しい資格情報を入力しないとログインビューに適切なエラーメッセージを表示します。ビューにエラーメッセージを表示する方法を理解できません。表示でpassport.js認証エラーメッセージを表示

これは私の設定です。私は、次のものが含まconfig/passport.jsを、持っている:

var passport = require('passport'), 
LocalStrategy = require('passport-local').Strategy, 
bcrypt = require('bcrypt'); 

passport.serializeUser(function(user, done) { 
    done(null, user.id); 
}); 

passport.deserializeUser(function(id, done) { 
    User.findOne({ id: id } , function (err, user) { 
     done(err, user); 
    }); 
}); 

passport.use(new LocalStrategy({ 
    usernameField: 'email', 
    passwordField: 'password', 
    passReqToCallback : true 
}, 
function(req, email, password, done) { 

    User.findOne({ email: email }, function (err, user) { 
     if (err) { return done(err); } 
     if (!user) { 
     return done(null, false, { message: 'Please enter a valid email address.' }); 
     } 

     if (!req.body.username) { 
     return done(null, false, { message: 'Please enter your username.' }); 
     } 

     bcrypt.compare(password, user.password, function (err, res) { 
      if (!res) { 
      return done(null, false, { 
       message: 'Invalid Password' 
      }); 
      } 

      var returnUser = { 
      username: user.username, 
      email: user.email, 
      createdAt: user.createdAt, 
      id: user.id 
      }; 

      return done(null, returnUser, { 
      message: 'Logged In Successfully' 
      }); 

     }); 
    }); 
    } 
    )); 

その後、私は次のものが含まapi/controllers/AuthController.jsを、持っている:

var passport = require('passport'); 

    module.exports = { 

    _config: { 
    actions: false, 
    shortcuts: false, 
    rest: false 
    }, 

    login: passport.authenticate('local', { successRedirect: '/', 
          failureRedirect: '/login', 
          failureFlash: true 
    }), 

    logout: function(req, res) { 
    req.logout(); 
    res.redirect('/login'); 
    } 
}; 

ユーザーが正しい資格情報を記入した場合に再度、これは正常に動作しています。私は私のテンプレートエンジンとしてハンドルを使用していて、そのようなログイン・ビューにエラーメッセージを表示したいと思います:

<div class="alert">{{ message }}</div> 

は、これまでのところ私は無駄に{{ failureMessage }}{{ message }}{{ req.flash.failureMessage }}{{ req.flash.err }}{{ req.flash.message }}を試してみました。だから、私の見解に適切なエラーメッセージを表示するにはどうすればいいですか?そして、私の見解では、どのようにして誤ったフィールドを強調していますか?

答えて

1

これが役立つかどうかわからない、Brad。

https://stackoverflow.com/a/25151855/3499069

私はあなたがそれをuser[0].idする必要がありますが、私は最近離れパスポートから移動してきたので、私は間違っている可能性があなたのserializeUserコールで考えます。

2

ないここでパスポートの専門家が、thisに応じてすべてを行う必要があるreq.flash('error')と再描画のログインビューにある:

res.render("login", {error: req.flash("error")}); 

そしてハンドルテンプレートで、エラーを表示します。

{{ error }} 
0

私の意見では、急行点滅は含まれていませんでしたか?お使いのルータの

var flash = require('connect-flash'); 
app.use(flash()); 

追加

req.flash(type, message); 

と使用

var t = req.flash(type); 
res.render(view, {flashMessage: t}); 
関連する問題