2015-03-19 6 views
4

Я удивлен, что так сложно найти или что-то не так со мной.Стратегия Passport.js без полей

Мне нужен passport.jsstrategy, что не требует никаких полей - для выполнения аутентификации с ним на простом пользователе GET запроса на '/' и манипулировать данные сеанса пользователя, например, сделать новый «гостевой» пользователь.

Возможно, я могу сделать это с помощью паспорта local-strategy? Или мне нужно создать пользовательский?

Я видел этот вопрос Configure Passport to accept request without body?, но я просто не могу понять, как предложенная в ответ упаковка будет что-то менять.

Edit: вот что я пытаюсь достичь

passport.use('guest', new LocalStrategy({ 
    passReqToCallback: true 
}, 
function (req, NOusername, NOpassword, done) { 
////NO PASSWORD OR USERNAME checks here, just deciding what kind of temporary user needs to be created/// 
if (req.session.passport) { 
    ///create new user with previous session data 
    done(null,user) 
} 
else { 
    ///create clean user 
    done(null, user) 
}) 
) 

, а затем в routes.js

app.get('/', passport.authenticate('guest'), function (req, res) {   
    res.render('PeerRoom.ejs', req.user);   
}); 

ответ

4

Edit: Другой подход может быть с помощью req.logIn и пропустить дело со стратегиями общей сложности

app.get('/', yourCustomGuestAuthenticationMiddleware, function (req, res) {   
    res.render('PeerRoom.ejs', req.user);   
}); 
function yourCustomGuestAuthenticationMiddleware(req, res, next){ 
    // No need to do anything if a user already exists. 
    if(req.user) return next(); 

    // Create a new user and login with that 
    var user = new User({name: 'guest'+Math.random().toString() }); 
    user.save(); 
    req.logIn(user, next); 
} 

Для того, чтобы новый пользователь гостя, просто сделать это вместо того, чтобы отвергать аутентификации

Вот модифицированный example from the docs

var passport = require('passport'), 
    LocalStrategy = require('passport-local').Strategy; 

passport.use(new LocalStrategy(
    function(username, password, done) { 
     User.findOne({ username: username }, function(err, user) { 
      if (err) return done(err); 
      if (!user) { 

       /* HERE, INSTEAD OF REJECTING THE AUTHENTICATION */ 
       // return done(null, false, { message: 'Incorrect username.' }); 

       /* SIMPLY CREATE A NEW USER */ 
       var user = new User({ name: 'guest'+Math.random().toString() }); 
       user.save(); 
       /* AND AUTHENTICATE WITH THAT */ 
       return done(null, user); 

      } 
      if (!user.validPassword(password)) { 
       return done(null, false, { message: 'Incorrect password.' }); 
      } 
      return done(null, user); 
     }); 
    } 
)); 
+0

Дело в том, что им пытаются сделать это без, на самом деле, сама аутентификация, т.е. я хочу создать нового гостя, не проверяя пароль и имя пользователя вообще, больше этого имени пользователя и пароль не предоставляется вообще, я хочу запустить эту стратегию на простом запросе GET на главную страницу. –

+0

Добавлен скомплекс кода, который представляет что я пытаюсь достичь –

+0

Оформить заказ Редактировать – laggingreflex

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