2.註冊-Node部分
有登入怎麼可能沒有註冊對吧。
exports.postSignUp = function (req, res, next) {
var user = {
email: req.body.email,
name: req.body.name.trim(),
password: req.body.password,
password_confirmation: req.body.password_confirmation,
current_sign_in_ip: req.ip //last
};
if (!validator.isEmail(user.email)){
return res.status(401).json({
info: 'invalid Email',
data: {}
});
}
if (string_validator.isEmpty(user.name)){
return res.status(401).json({
info: 'blank name',
data: {}
});
}
if(!user.password === user.password_confirmation){
return res.status(401).json({
info: 'password not match',
data: {}
});
}
delete user.password_confirmation
Users.forge().query({
where: {
email: req.body.email
}
}).fetchOne().then(function (existingUser) {
if (existingUser) {
return res.status(401).json({
info: 'Account with that email address already exists',
data: {}
});
}
Users.forge().create(user).then(function (user) {
var token = jwt.encode({ id: user.attributes.id}, tokenSecret);
return res.json({ token : token,user: user.toJSON() });
}).catch(function (err) {
return next(err);
});
});
};
app.post('/api/signup', auth.postSignUp);
前半段要對進來的值(email,password等)做一些判斷,判斷完沒問題當然就是塞進資料庫,但在塞進資料庫前其實有做加密的動作
這裡以bcrypt做加密,在create(user)時會執行到。
setDefaultAndHashPassword: function (model, attrs, options) {
return new Promise(function (resolve, reject) {
bcrypt.genSalt(10, function (err, salt) {
bcrypt.hash(model.attributes.password, salt, function (err, hash) {
if (err) reject(err);
delete model.attributes.password;
model.set('encrypted_password', hash);
resolve(hash); // data is created only after this occurs
});
});
});
}
結果也傳回jwt token,註冊沒問題會順便登入。