Source: passport-req.js


function decorate(req){

    /**
     * Intiate a login session for `user`.
     *
     * Options:
     *   - `session`  Save login state in session, defaults to _true_
     *
     * Examples:
     *
     *     req.logIn(user, { session: false });
     *
     *     req.logIn(user, function(err) {
     *       if (err) { throw err; }
     *       // session saved
     *     });
     *
     * @param {User} user
     * @param {Object} options
     * @param {Function} done
     * @api public
     */
    req.login =
    req.logIn = function(user, options, done) {
      if (typeof options == 'function') {
        done = options;
        options = {};
      }
      options = options || {};

      var property = 'user';
      if (this._passport && this._passport.instance) {
        property = this._passport.instance._userProperty || 'user';
      }
      var session = (options.session === undefined) ? true : options.session;

      this[property] = user;
      if (session) {
        if (!this._passport) { throw new Error('passport.initialize() middleware not in use'); }
        if (typeof done != 'function') { throw new Error('req#login requires a callback function'); }

        var self = this;
        this._passport.instance.serializeUser(user, this, function(err, obj) {
          if (err) { self[property] = null; return done(err); }
          self._passport.session.user = obj;
          done();
        });
      } else {
        done && done();
      }
    };

    /**
     * Terminate an existing login session.
     *
     * @api public
     */
    req.logout =
    req.logOut = function() {
      var property = 'user';
      if (this._passport && this._passport.instance) {
        property = this._passport.instance._userProperty || 'user';
      }

      this[property] = null;
      if (this._passport && this._passport.session) {
        delete this._passport.session.user;
      }
    };

    /**
     * Test if request is authenticated.
     *
     * @return {Boolean}
     * @api public
     */
    req.isAuthenticated = function() {
      var property = 'user';
      if (this._passport && this._passport.instance) {
        property = this._passport.instance._userProperty || 'user';
      }

      return (this[property]) ? true : false;
    };

    /**
     * Test if request is unauthenticated.
     *
     * @return {Boolean}
     * @api public
     */
    req.isUnauthenticated = function() {
      return !this.isAuthenticated();
    };
}
exports = module.exports = decorate;