2016-04-06 9 views
3

önce kimlik doğrulama için kullanımının katman ben bu hat ile /public dizinden hizmet verilecek statik dosyaları kurdum Statik içeriği sunmadan önce kimlik doğrulama için ve kullanıcı kimlik doğrulaması için bir rotaya yönlendirilmek üzere doğrulanmamışsa (ör. /login).
Bunu nasıl yapmam gerektiğinden emin değilim. Herhangi bir fikir?Express.js 4 Benim <code>express</code> uygulamasında statik dosyalar

cevap

6

Belirttiğinizden beri, bir çeşit kimlik doğrulama sisteminizin olduğunu varsayacağım.

Express'te, koddaki middlewarların sırası önemlidir: eğer middleware 1, middleware 2'den önce çalıştırılmak isteniyorsa, bunları kodunuza göre yerleştirmelisiniz. Seni örneği olmadığını kontrol için bir userAuthenticated fonksiyonu var varsayıyorum sadece express.static

app.use(function (req, res, next) { 
    if (!userAuthenticated(req)) { 
     return res.redirect('/login'); 
    } 
    next();  
}); 

app.use(express.static(__dirname + '/public')); 

çağrısı önce kimlik doğrulama ortakatmanını yazabilirsiniz statik dosyaları servis etmeden önce kimlik doğrulaması istiyorsanız express.static yana , bir ara katman olduğunu HTTP istekleri geçerli bir erişim belirteci içerir.

Read more about middlewares.

+0

Great! Çözüm için teşekkürler! Benzer bir şey düşünüyordum, ancak uygulama için emin değildim ve bu noktada böyle bir yönlendirme yapabiliyorsam. Tekrar teşekkürler! –

+1

teşekkürler! Cevabınız, statik dosya sorusunu çözmemde yardımcı oldu, aynı zamanda orta sınıfların nasıl çalıştığını daha iyi anlamak için bana yardımcı oldu. Artık her şey mantıklı –

3

Passport'a bakın.

Passport birçok kimlik doğrulama stratejisine sahiptir. Eğer sadece bazı giriş-özelliğini istiyorsanız bu ne ihtiyaç vardır

var express = require('express'); 
var passport = require('passport'); 
var BasicStrategy = require('passport-http').BasicStrategy; 
var db = require('./db'); 


// Configure the Basic strategy for use by Passport. 
// 
// The Basic strategy requires a `verify` function which receives the 
// credentials (`username` and `password`) contained in the request. The 
// function must verify that the password is correct and then invoke `cb` with 
// a user object, which will be set at `req.user` in route handlers after 
// authentication. 
passport.use(new BasicStrategy(
    function(username, password, cb) { 
    db.users.findByUsername(username, function(err, user) { 
     if (err) { return cb(err); } 
     if (!user) { return cb(null, false); } 
     if (user.password != password) { return cb(null, false); } 
     return cb(null, user); 
    }); 
    })); 


// Create a new Express application. 
var app = express(); 

var authenticate = passport.authenticate('basic', { 
    session: false, 
    failureRedirect: '/login' 
}); 

app.use(authenticate, express.static(__dirname + '/public')); 
0

Aradığınız kimlik doğrulama ne tür bağlıdır, ancak: Burada

temel HTTP kimlik doğrulaması ile bir örnek http://passportjs.org/

Yerel giriş stratejileri, facebook, twitter vb. Gibi 3'üncü parti stratejilerinin yanı sıra bir sürü destek sunar.

Başka bir şeye ihtiyacınız varsa, daha basit ya da kendinden emin olun, sadece sizin için kullanacağınız bir ara katman yazın. stayı ilan etmek tik uç noktası ve her şey kontrol edilirse, sonraki() öğesini ve kullanıcının yeniden denenmesi gerekiyorsa res.redirect değerini yeniden girin.

İlgili konular