【发布时间】:2016-10-07 10:13:09
【问题描述】:
我在使用由sailsJS 制作的API 时遇到了一个奇怪的情况。
所以当我使用邮递员登录时,护照在数据库中创建一个会话,一切正常。
但是当我使用我用 Angular2 制作的应用并对我的 API 执行相同的请求时,护照会在我的数据库中生成许多会话……
这是我的代码: 登录 - SailsJS
login: (req, res) => {
passport.authenticate('local', (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);
},
PassPort Conf - SailsJS
function findById(id, fn) {
User.findOne(id).then(function (user) {
if (!user) return fn("User Not Found", null) ;
return fn(null, user);
}).catch(function(err) {
console.log("err",err) ;
return fn(err, null);
});
}
passport.serializeUser( (user, done) => {
done(null, user.id);
});
passport.deserializeUser( (id, done) => {
findById(id, function (err, user) {
if (err)
user = null;
return done(err, user);
});
});
passport.use(new LocalStrategy({
usernameField: 'email',
passwordField: 'password'
},
function (email, password, done) {
User.findOne({email: email}, (err, user) => {
if (err) {
return done(err);
}
if (!user) {
return done(null, false, {message: 'Incorrect email.'});
}
bcrypt.compare(password, user.password, (err, res) => {
if (!res)
return done(null, false, {
message: 'Invalid Password'
});
let returnUser = {
id: user.id,
email: user.email
};
return done(null, returnUser, {
message: 'Logged In Successfully'
});
});
});
}
调用 api - Angular2
private _headers = new Headers();
private _options = new RequestOptions({
headers: this._headers,
withCredentials: true
});
login(email, password): Observable < any > {
return this._http
.post(this._url + 'login', {
email: email,
password: password
}, this._options)
.map(
(res: any) => {
let user = JSON.parse(res._body).user;
if (user) {
this.isLogged = true;
localStorage.setItem('User', JSON.stringify(user));
return true;
} else {
return false;
}
}
)
}
【问题讨论】:
标签: angular session sails.js passport.js