![](/img/trans.png)
[英]Using passport-facebook without Mongoose User (No Mongo in the MEAN stack)
[英]How can I save additional fields upon user signup when using MEAN stack and Passport?
當用戶在我的網站上注冊時,我嘗試保存的不僅僅是電子郵件和密碼。 所有Passport示例僅顯示正在存儲的電子郵件和密碼。 如果我在用戶注冊時也需要存儲“性別”和“名稱”字段怎么辦? 我花了一整天的時間試圖解決這個問題。 這是我當前正在使用的:
護照.js:
passport.use('local-signup', new LocalStrategy({
usernameField : 'email',
passwordField : 'password',
passReqToCallback : true
},
function(req, email, password, done) {
process.nextTick(function() {
User.findOne({ 'email' : email }, function(err, user) {
if (err)
return done(err);
if (user) {
return done(null, false, req.flash('signupMessage', 'Email is already taken.'));
} else {
var newUser = new User();
newUser.email = email;
newUser.password = newUser.generateHash(password);
newUser.save(function(err) {
if (err)
throw err;
return done(null, newUser);
});
}
});
});
}));
route.js:
app.post('/signup', function(req, res, next) {
passport.authenticate('local-signup', function(err, user, info) {
if (err) { return next(err); }
if (!user) { return res.redirect('/'); }
req.logIn(user, function(err) {
if (err) { return next(err); }
// load up the user model
var User = require('../app/models/user');
var conditions = { email: req.user.email }
, update = {
name: req.name, // works if I manually set "req.name" to "'Bill Smith'"
gender: req.gender // works if I manually set "req.gender" to "'Male'"
}
, options = { multi: false };
User.update(conditions, update, options, callback);
function callback (err, numAffected) {
// numAffected is the number of updated documents
}
return res.json({ response: 1, username: req.user.email });
});
})(req, res, next);
});
angular.js:
$scope.signupMain = function () {
var data = $.param({
name: $('#name').val(),
email: $('#email').val(),
password: $('#password').val(),
gender: $('#gender').val()
});
$http({
url: 'signup',
method: "POST",
data: data,
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
}).success(function (result, status, headers, config) { // Do something })
.error(function (data, status, headers, config) { $scope.status = status; });
};
如果我只是在用戶注冊時嘗試存儲電子郵件和密碼,則一切正常,但是所有保存“名稱”和“性別”的嘗試均失敗了。 基本上,在routes.js
我無法獲得name: req.name
和gender: req.gender
正常工作。 也就是說, req.name
和req.gender
不會“獲取”這些值。 如果我手動輸入name: 'Bill Smith'
和gender: 'Male'
。 我究竟做錯了什么?
1.-將新屬性添加到passport.js
:
var newUser = new User();
newUser.email = email;
newUser.password = newUser.generateHash(password);
newUser.gender = req.body.gender; // Your new attribute (req.body = POST data)
newUser.save(function(err) {
if (err)
throw err;
return done(null, newUser);
});
2.-修改用戶模型並將新屬性添加到架構
使用req.body獲取您需要的字段。 但是,您將需要解析它。 您可以使用bodyParser。
我在Google搜尋時發現了這個問題,而req.body卻不適合我。 我不得不使用req.query。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.