2012-06-10 9 views
7

(обновленный код с функциями сериализации - еще перенаправляет/failedRedirect)Node.js аутентификации пользователя с использованием паспорта

Я пытаюсь получить простой аутентификации имя пользователя/пароль, используя Собирается пакет паспорта, но терпит неудачу. В приведенном ниже примере я попытался проверить, работает ли аутентификация, в основном, всегда возвращая действительную проверку подлинности (независимо от того, что передается), но по какой-то причине она терпит неудачу, а паспорт перенаправляет на неудачную ссылку входа в систему.

Если кто-нибудь может помочь мне выяснить, как получить этот пример, чтобы просто аутентифицировать что-либо, я должен иметь возможность управлять оттуда.

Код в CoffeeScript является:

express = require "express" 
passport = require "passport" 
LocalStrategy = require("passport-local").Strategy 

passport.use(new LocalStrategy((username, password, done) -> 
    console.log "LocalStrategy invoked" 
    done(null, {id: 1, name: "Marius"}) 
)) 

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

passport.deserializeUser (obj, done) -> 
    done null, obj 

app = express.createServer() 

app.configure -> 
    app.use express.bodyParser() 
    app.use express.static("./public") 
    app.use express.cookieParser("SOMESECRET") 
    app.use express.session 
    secret: "SOMESECRET" 
    cookie: 
     maxAge: 60000 
    app.use passport.initialize() 
    app.use passport.session() 
    app.set "view", "./srv/views" 
    app.set "view engine", "jade" 

app.get "/login", (req, res) -> 
    res.send "login page" 

app.post "/login", passport.authenticate("local", 
    failureRedirect: "/failedRedirect" 
    successRedirect: "/successRedirect" 
    failureFlash: true) 

app.listen 8082 

Решено: Хорошо, я полагаю, что было несколько причин, почему я не мог заставить его работать. Сериализованный материал может быть одним (я не тестировал), но так как Джаред сказал, что они нужны, я оставляю их (он автор Паспорта). Другая путаница может быть связана с экспресс-версиями и моей путаницей с npm. Я считаю, что я тестировал как последнюю версию v2, но я также тестировал v3, который я запускаю сейчас. Для версии три вы, вероятно, должны также проверить модуль connect-flash на Github, так как некоторые из «флеш-файлов», которые используются в примерах Джареда, были перемещены из express v3 (поэтому модуль возвращает его обратно ...). И, наконец, убедитесь, что вы публикуете соответствующие имена имен имен (username и password по умолчанию).

ответ

11

Мне кажется, что вам не хватает необходимой логики сериализации пользователя для установки сеанса входа в систему. Если добавить эти две функции в коде JavaScript, он работает:

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

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

Вы хотите сериализовать пользователей в соответствии с вашими потребностями. Подробности внизу внизу страницы: http://passportjs.org/guide/configuration.html

+0

Обновленный код для включения сериализации, но аутентификация по-прежнему терпит неудачу. Обновлен ли код успешно завершен в конце? Спасибо .. –

+0

Да, это так. Выводит ли ваш код сообщение «LocalStrategy invoked». Это может помочь монтировать 'app.use (express.errorHandler ({dumpExceptions: true, showStack: true}));' и посмотреть, не выбрасываются ли какие-либо исключения. –

+0

На моем конце даже «вызывается» сообщение не отображается. Я попробую ваш errorHandler, чтобы увидеть, всплывает ли что-нибудь. –

9

Имена имен переменных, как правило, самые большие для людей, у которых я вижу проблемы с локальной стратегией паролей. Вероятно, он должен быть большим и полужирным в документации, и, вероятно, должны быть значения конфигурации для их изменения.

+0

Похоже, теперь есть значения конфигурации для их изменения. Внизу этой страницы: http://passportjs.org/guide/username-password/ –

+0

Да, этот только что меня укусил в прикладе на два дня. – darethas

1

Я сделал succsessfully по этой ссылке http://danialk.github.io/blog/2013/02/23/authentication-using-passportjs/ загрузить образец кода из https://github.com/DanialK/PassportJS-Authentication расположения

только одно изменение требуется в routes.js код изменения

app.post("/login" ,passport.authenticate('local',{successRedirect : "/",failureRedirect : "/login", })); 

К ------ ------------------------

app.post("/login" ,passport.authenticate('local',{failureRedirect : "/login"}), function(req,res){ res.render('your home page here', {user : req.user });});