2014-02-19 3 views
0

Извинения написаны в coffeescript (не чистые js). Я смотрел паспорт.js, и я пытаюсь включить его в проект, вот его вырезанная версия только с файлом auth.Локальная стратегия Passport.js, как обеспечить маршрут

express = require 'express' 
passport = require 'passport' 
LocalStrategy = require 'passport-local' 
.Strategy 
BasicStrategy = require 'passport-http' 

app = express() 
server = require 'http' 
.createServer app 
server.listen 3000 

app.use express.cookieParser() 
app.use express.session 
    secret: 'abc' 
app.use express.json() 
app.use express.urlencoded() 
app.set 'views', "#{__dirname}/views" 
app.set 'view engine', 'jade' 
app.locals.pretty = true 
app.use passport.initialize() 
app.use passport.session() 

passport.use new LocalStrategy (username, password, done) -> 
    if username is 'admin' and password is 'password' 
    return done null, user = 
     username: 'admin' 
    else 
    return done null, false, message: 'Incorrect username/password' 

passport.serializeUser (user, done) -> 
    done null, user.username 

passport.deserializeUser (username, done) -> 
    done null, user = 
    username: username 

app.get '/login', (req, res) -> 
    res.render 'login', 
    title: 'Login' 

app.post '/login', passport.authenticate 'local', 
    successRedirect: '/admin' 
    failureRedirect: '/login' 

app.get '/admin', (req, res) -> 
    res.render 'admin', 
    title: 'Admin' 

app.get '/devices', (req, res) -> 
    res.render 'devices', 
    title: 'Devices' 

Это очень простой, в том, что локальная стратегия просто проверяет, что имя пользователя является «администратора» и пароль «пароль», но я не уверен, как обеспечить «/ администратора» и «/ устройства» маршруты? Я попробовал такую ​​вещь:

app.get '/devices', passport.authenticate('local', { 
    failureRedirect: '/login' 
}, (req, res) -> 
    res.render 'devices', 
    title: 'Devices' 

Но это, похоже, не работает ..

ответ

3

Если пользователи успешно прошел проверку подлинности после входа в систему, вы могли бы сделать что-то вроде:

ensureAuthenticated = (req, res, next) -> 
    if req.isAuthenticated() then return next() else res.send 401 

app.get "/devices", ensureAuthenticated, (req, res) -> 
    res.render 'devices', 
    title: 'Devices' 
+0

Отлично, благодаря! – gratz

Смежные вопросы