4

node.js、express、Passportを使ってログイン認証でサイトを構築しています。サインアップ ページについては、ユーザー名が既に使用されている場合にサイトにメッセージを送信するようにします。現在、次のコードは正常に機能していますが、「アラート」タイプのメッセージを追加したいと考えています。背景はわずかに赤く、ハイライトされたテキスト。

signup.jade のコードは次のとおりです。

          div(class="col-lg-12")
                form(class="form" method="post" action="/SignupForm")
                    -if(message)
                        div#note #{message}                      
                    label(class="col-lg-12") username
                    input(type="text" name="username")
                    br
                    label(class="col-lg-12") password
                    input(type="password" name="password")
                    br
                    label(class="col-lg-12") email
                    input(type="email" name="email")
                    br
                    input(type="submit" value="Signup")

私のルートでは、私のコードはこれです(module.exports内にあります)

app.get('/SignupForm', function(req,res){                                       
    res.render('SignUp', {message: req.flash('signupMessage')});
});

app.post('/SignupForm', passport.authenticate('localSignup', {
    successRedirect: '/',
    failureRedirect: '/SignupForm',
    failureFlash: true
}));

最後に、Passport.js ファイルのコードは次のとおりです。

passport.use('localSignup', new localStrategy({
    usernameField: 'username',
    passwordField: 'password',
    passReqToCallback: true
},
    function (req, username, password, done) {
        process.nextTick(function () {
            User.findOne({'username' : username}, function (err, user) {
                if (err)
                    return done(err);
                else if (user){
                    return done(null, false, req.flash('signupMessage', 'User already taken'));
                } else {
                    var newUser = new User({username: username, password: password);
                    newUser.save(function (err) {
                        if (err) throw err;
                        return done (null, newUser);
                    });
                }
            });
        });
    })
);

ところで、私はすでに次のようなブートストラップ アラート メッセージを使用しようとしました。

.alert.alert-danger !{ message }

ただし、メッセージがまだ送信されていない場合でも、サインアップ ページ内の強調表示された領域がすぐに表示されます。

4

2 に答える 2

0

最高のコードではありませんが、機能します。

翡翠ファイル:

-if(message == 'User already taken')
      .alert.alert-danger #{message}

このようにして、メッセージが送信されない場合、ページ内に強調表示された領域はなく、メッセージは、jade ファイルが文字列「ユーザーが既に取得済み」を受信した場合にのみ表示されます。

于 2015-08-02T21:54:35.057 に答える