【问题标题】:Passport create multi session in my databasePassport 在我的数据库中创建多会话
【发布时间】: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


    【解决方案1】:

    我终于在我的快速会话配置中将“saveUninitialized”添加为 false。

    此参数设置为 true 会强制将“未初始化”的会话保存到存储中。 Documentation

    所以现在,只要 req.session 没有被护照更新,会话就不会被存储。

    【讨论】:

      猜你喜欢
      • 2016-02-24
      • 1970-01-01
      • 2012-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多