request.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. /**
  2. * Module dependencies.
  3. */
  4. var http = require('http')
  5. , req = http.IncomingMessage.prototype;
  6. /**
  7. * Intiate a login session for `user`.
  8. *
  9. * Options:
  10. * - `session` Save login state in session, defaults to _true_
  11. *
  12. * Examples:
  13. *
  14. * req.logIn(user, { session: false });
  15. *
  16. * req.logIn(user, function(err) {
  17. * if (err) { throw err; }
  18. * // session saved
  19. * });
  20. *
  21. * @param {User} user
  22. * @param {Object} options
  23. * @param {Function} done
  24. * @api public
  25. */
  26. req.login =
  27. req.logIn = function(user, options, done) {
  28. if (typeof options == 'function') {
  29. done = options;
  30. options = {};
  31. }
  32. options = options || {};
  33. var property = 'user';
  34. if (this._passport && this._passport.instance) {
  35. property = this._passport.instance._userProperty || 'user';
  36. }
  37. var session = (options.session === undefined) ? true : options.session;
  38. this[property] = user;
  39. if (session) {
  40. if (!this._passport) { throw new Error('passport.initialize() middleware not in use'); }
  41. if (typeof done != 'function') { throw new Error('req#login requires a callback function'); }
  42. var self = this;
  43. this._passport.instance.serializeUser(user, this, function(err, obj) {
  44. if (err) { self[property] = null; return done(err); }
  45. self._passport.session.user = obj;
  46. done();
  47. });
  48. } else {
  49. done && done();
  50. }
  51. };
  52. /**
  53. * Terminate an existing login session.
  54. *
  55. * @api public
  56. */
  57. req.logout =
  58. req.logOut = function() {
  59. var property = 'user';
  60. if (this._passport && this._passport.instance) {
  61. property = this._passport.instance._userProperty || 'user';
  62. }
  63. this[property] = null;
  64. if (this._passport && this._passport.session) {
  65. delete this._passport.session.user;
  66. }
  67. };
  68. /**
  69. * Test if request is authenticated.
  70. *
  71. * @return {Boolean}
  72. * @api public
  73. */
  74. req.isAuthenticated = function() {
  75. var property = 'user';
  76. if (this._passport && this._passport.instance) {
  77. property = this._passport.instance._userProperty || 'user';
  78. }
  79. return (this[property]) ? true : false;
  80. };
  81. /**
  82. * Test if request is unauthenticated.
  83. *
  84. * @return {Boolean}
  85. * @api public
  86. */
  87. req.isUnauthenticated = function() {
  88. return !this.isAuthenticated();
  89. };