2016-11-14 5 views
0

私のプロジェクトでは、認証にPassport jsを使用しています。サーバー側で私はExpress jsを使用しています。 app.jsで私は、パスポートのJSのための構成を有し、コードは次のとおりです。パスポートjs設定を共通ファイルに配置する方法

passport.use(new Strategy({ 
    passReqToCallback: true 
}, 
    function (req, username, password, done) { 
    req.models.users.find({ 'user_id' : username }, function (err, user) { 
     if (err) { return done(err); } 
     if (!user[0]) { 
     console.log("The username is Incorrect"); 
     return done(null, false, { message: 'Incorrect username.' }); 
     } 
     if (user[0].default_password!=password) { 
     console.log("The Password is Incorrect"); 
     return done(null, false, { message: 'Incorrect password.' }); 
     } 
     return done(null, user); 
    }); 
    } 
)); 


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

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

と、この後、私は、このようなクライアントの要求を検証しています:すべてが正常に動作している

app.post('/login', 
    passport.authenticate('local', { failureRedirect: '/login' }), 
    function(req, res) { 
    res.redirect('/'); 
    }); 

ここティル。 私はので、私はこのようなapp.jsでルートのパスを与えているのルートフォルダにこのルートapp.post('/login',...を配置する:

var users = require('./routes/users/users'); 
app.use('/users', users); 

私の問題がある:このユーザーのルート・ファイル内の私はしないでください私はパスポートの設定を持っているので、私は共通のファイルにパスポートの設定を置いて再利用することを考えていますが、私はそれをやる方法はわかりません。あなたは何か考えているなら助けてください。ありがとう。

答えて

1

ミドルウェアを作成して、auth.jsと呼んで、セッション情報を確認して、必要なすべてのルートにマウントすることができます。

'use strict'; 

const qs = require('querystring'), 
    router = require('express').Router(); 

router.use(function (req, res, next) { 
    // set this in res.locals 
    if (!req.user) { 
     return res.redirect('/?' + qs.stringify({ 
      'r': req.originalUrl 
     })); 
    } 

    next(); 
}); 

module.exports = router; 

あなたは上記の方法を使用する場合は、あなたのserver/app.jsres.locals.user = req.user;を追加する必要があります。

この後、認証が必要なすべてのルートで上記のミドルウェアを要求することができます。

router.verb('/path', require('./path-to-auth')); 
router.verb('/path', (req, res, next) => { 
// this route will only be executed if the user is authenticated 
}); 
+0

おかげで、あなたは '// res.localsでこれを設定するif(!req.user){ リターンres.redirect( '/?' + qs.stringify(の意義あるものを私に伝えることができます{ 'r':req.originalUrl })); } 'それは何をするのでしょうか? –

+0

'auth.js'にパスポートの設定を書くべきですか?' app.js'に置くことができますか? –

+0

これは、ログイン後にユーザーを目的のページにリダイレクトする単なる方法です。あなたのルートの後ろにマウントする 'login.js'ファイルにパスポートのものを入れることができます –

関連する問題