2017-01-08 2 views
0

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

Это мой код: * AuthController

var passport = require('passport'); 

module.exports = { 

     _config: { 
     actions: false, 
     shortcuts: false, 
     rest: false 
    }, 

    login: function(req, res) { 
     passport.authenticate('local', function(err, user, info) { 
      if ((err) || (!user)) { 
       return res.send({ 
        message: info.message, 
        user: user 
       }); 
      } 
      req.logIn(user, function(err) { 
       if (err) res.send(err); 
       return res.send({ 
        message: info.message, 
        user: user 
       }); 
      }); 

     })(req, res); 
    }, 

    logout: function(req, res) { 
     req.logout(); 
     res.redirect('/'); 
    }, 

    signup: function (req, res) { 
     var data = req.allParams(); 
     User.create({email:data.email,password:data.password,name:data.name}).exec(function(error,user){ 
      if(error) return res.negotiate(err); 
      if(!user)return res.negotiate(err); 
      return res.ok(); 
     }); 
    } 
}; 

*view 
<h1>List of my dates</h1> 
<h1><%= email %></h1> 
<h1><%= req.user.name %></h1> 

*model 
attributes: { 
    email: { 
     type: 'email', 
     required: true, 
     unique: true 
    }, 

    password: { 
     type: 'string', 
     minLength: 6, 
     required: true 
    }, 
    toJSON: function() { 
     var obj = this.toObject(); 
     delete obj.password; 
     return obj; 
    } 
}, 
    beforeCreate: function(user, cb) { 
     bcrypt.genSalt(10, function(err, salt) { 
      bcrypt.hash(user.password, salt, function(err, hash) { 
       if (err) { 
        console.log(err); 
        cb(err); 
       } else { 
        user.password = hash; 
        cb(); 
       } 
      }); 
     }); 
    } 
}; 

только работает, если я использую res.render ('вид', {электронная почта: req.user.email}), но я хотел бы использовать пользовательские данные во многих представлениях. Я не могу написать методы с текущими параметрами пользователя, потому что не работает.

Спасибо.

+0

FYI, метод экземпляра модели (toJson) опускается в v1, поэтому я не буду рассчитывать на то, что это сработает. См. В конце здесь: http://0.12.sailsjs.com/documentation/concepts/models-and-orm/models –

ответ

0

Непонятно мне, какова ваша фактическая проблема или какой вопрос на самом деле, но я постараюсь помочь.

Посмотрите здесь:

login: function(req, res) { 
    passport.authenticate('local', function(err, user, info) { 
    if ((err) || (!user)) { 
     return res.send({ 
     message: info.message, 
     user: user 
     }); 
    } 
    ... 
    })(req, res); 
}, 

Там вы добавляете данные (местных жителей) в EJS и значения message и user поэтому в EJS вы должны ссылаться на него, как это, так что вы будете использовать user.name и не req.user.name? Я не уверен, почему вы связываете (req, res).

Это сбивает с толку, потому что ваш ejs использует значение электронной почты, но я не вижу его там как локальный, так что, возможно, это ваша проблема, она должна быть определена?

Рассмотрим следующий простой пример:

// User Controller 

// GET request /signin 
// The signin form 
signin(req, res) { 
    // Load the view from app/views/* 
    return res.view('signin', { 
    title: 'Sign In' 
    }); 
}, 

// POST request to /signin 
// This was posted from the signin form 
// Use io.socket.post(...) to do this from the signin form 
// Can use window.location.replace('/account') on successful request 
authenticate(req, res) { 
    // The data posted, email and password attempt 
    var data = req.allParams(); 
    // Does it match? 
    User.findOne({ 
    email: data.email, 
    // This is stupid, don't ever use plain text passwords 
    password: data.password 
    }) 
    .exec(function(err, user) { 
    // Server related error? 
    if (err) res.serverError(err.message); 
    // No user was found 
    if (!user) res.badRequest('Username or password not found'); 
    // Sign the user in 
    req.session.userId = user.id; 
    // User was found 
    res.ok(); 
    }); 
}, 

// GET request to /account 
// Displays the users information 
// Can use policies to ensure that only an authenticated user may access their own account information 
account(req, res) { 
    // If the user is not signed in 
    // This is an alternative to using the sails policy isLoggedIn 
    if (!req.session.userId) res.redirect('/signin'); 
    // Get the users details 
    User.findOne({ 
    id: req.session.userId 
    }) 
    .exec(function(err, user) { 
    // Server related error? 
    if (err) res.serverError(err.message); 
    // No user was found 
    if (!user) res.redirect('/signin'); 
    // Load the ejs file that displays the users information 
    return res.view('account/index', { 
     title: 'Account Information', 
     user: user 
    }); 
    }); 
}, 

// Account View 

<p>Email: {{user.email}}</p> 
<p>Password: {{user.password}}</p> 

проверить это, если вы хотите иметь дело с шифрованием пароля: http://node-machine.org/machinepack-passwords

И это, если вы хотите иметь дело с испытаниями прочности (наборов пользовательских пароль): https://www.npmjs.com/package/owasp-password-strength-test

Это, как паспорт кажется излишним, если вы выполняете только локальную аутентификацию?

+0

Спасибо, что ответили мне. Да, это моя проблема. Я не могу получить информацию о пользователе из представления. Я пытаюсь с req.user.name и с user.name, но ничего не происходит. Ответ «undefined». Я увижу эти статьи. Спасибо за помощь. –

+0

@FranciscoPossetto Взгляните на мой пример, чтобы вы поняли, как местные жители (данные) работают в ejs, затем редактируют вопрос и добавляют действие/метод контроллера, который загружает код вида? Я не вижу этого, я слепой? –

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