Вход

Просмотр полной версии : Помогите с авторизацией, делаю по примеру скринкаста Ильи


LoKeR
06.12.2016, 23:46
Проблема в том что метод User.singin ничего не возвращает, даже console.log, а опыта еще не хватает у меня(((

и еще не работает в схеме типы Data, Double, и default: Data.now

Подскажите пожалуйста!)

Код модели users:

var crypto = require('crypto');
var async = require('async');
var mongoose = require('../libs/mongoose');
var Schema = mongoose.Schema;

var schema = new Schema({
login: {
type: String,
unique: true
},
phone: {
required: true,
type: String,
unique: true
},
hashPassword: {
required: true,
type: String
},
salt: {
type: String,
required: true
},
balance: {
type: Double,
default: 0.00
},
singupData: {
type: Data,
default: Data.now
}
});
schema.methods.encryptPassword = function(password) {
return crypto.createHmac('sha1', this.salt).update(password).digest('hex');
};

schema.virtual('password')
.set(function(password) {
this._plainPassword = password;
this.salt = Math.random() + '';
this.hashPassword = this.encryptPassword(password);
})
.get(function() { return this._plainPassword; });

schema.methods.checkPassword = function (password) {
return this.encryptPassword(password) === this.hashPassword;
};

schema.statics.singup = function (phone, password) {
return phone + ' / ' + password;
};

schema.statics.singin = function (phone, password, callback) {
var User = this;

console.log(phone + ' + ' + password);

async.waterfall([
function (callback) {
User.findOne({phone: phone, hashPassword: this.checkPassword(password)}, callback)
},
function (user, callback) {
if(user) {
callback(null, user);
} else {
callback(message = 'Телефон или пароль не верны!', null);
}
}
], callback);
};


exports.User = mongoose.model('User', schema);


Код роута:

router.post('/singin', function (req, res, next) {
var phone = req.body.phone;
var password = req.body.password;

User.singin(phone, password, function (err, user) {
if(err) {
return next(err);

console.log(err);
}

console.log(user);

req.session.user = user._id;
res.send({});
});
});

seaman
07.12.2016, 12:41
Не помню чтобы Илья использовал router. Говорил о нем, но использовал прямые функции app.post...
Роутер к приложению подключен?
Здесь показано как (в конце страницы).
http://expressjs.com/ru/guide/routing.html
типа:
app.use('/path', router);

LoKeR
07.12.2016, 14:00
var router = require('express').Router();

router.post('/singin', function (req, res, next) {
var phone = req.body.phone;
var password = req.body.password;

User.singin(phone, password, function (err, user) {
if(err) {
return next(err);

console.log(err);
}

console.log(user);

req.session.user = user._id;
res.send({});
});
});

module.exports = router;


seaman, так понятнее?

seaman
07.12.2016, 14:04
Я это вижу.
Вы по ссылке ходили? Вот это там видели?-
Потом загрузите модуль маршрутизации в приложение:
var birds = require('./birds');
...
app.use('/birds', birds);

Т.е. Вот это у Вас есть?
var router = require('./router');
app.use('путь', router);
Да, и обратите внимание, что путь в роутере относительно того, что прописан в app.use

LoKeR
07.12.2016, 14:15
Дело вовсе не в роутинге было!